NOTE: You can use shadow to simulate outline.
OutlineTextView class in Kotlin
class OutlineTextView : AppCompatTextView {    private val defaultOutlineWidth = 0F    private var isDrawing: Boolean = false    private var outlineColor: Int = 0    private var outlineWidth: Float = 0.toFloat()    constructor(context: Context) : this(context, null)    constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)    constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {        if (attrs != null) {            val a = context.obtainStyledAttributes(attrs, R.styleable.OutlineTextView)            outlineColor = a.getColor(R.styleable.OutlineTextView_outlineColor, currentTextColor)            outlineWidth = a.getDimension(R.styleable.OutlineTextView_outlineWidth, defaultOutlineWidth)            a.recycle()        } else {            outlineColor = currentTextColor            outlineWidth = defaultOutlineWidth        }        setOutlineWidth(TypedValue.COMPLEX_UNIT_PX, outlineWidth)    }    fun setOutlineColor(color: Int) {        outlineColor = color    }        fun setOutlineWidth(unit: Int, width: Float) {        outlineWidth = TypedValue.applyDimension(                unit, width, context.resources.displayMetrics)    }        override fun invalidate() {        // prevent onDraw.setTextColor force redraw        if (isDrawing) return        super.invalidate()    }    override fun onDraw(canvas: Canvas) {        // if (outlineWidth > 0) {            isDrawing = true            paint.style = Paint.Style.FILL            super.onDraw(canvas)            val currentTextColor = currentTextColor            paint.style = Paint.Style.STROKE            paint.strokeWidth = outlineWidth            setTextColor(outlineColor)            super.onDraw(canvas)            setTextColor(currentTextColor)            isDrawing = false        /*        } else {            super.onDraw(canvas)        }         */    }}res/values/attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="OutlineTextView">
        <attr name="outlineColor" format="color" />
        <attr name="outlineWidth" format="dimension" />
    </declare-styleable>
</resources>Sample usage
<com.myapp.view.OutlineTextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="#fff"
    android:textSize="30sp"
    app:outlineColor="#000"
    app:outlineWidth="3"
/>textView.setOutlineWidth(TypedValue.COMPLEX_UNIT_PX, 3f)textView.setOutlineColor(color)NOTE: Refer Android Get Color.