我想把自定义的图形设置为EditText
的光标。
对于Android Q之前的API,我使用反射并且它可以正常工作。从Android Q开始,我们有了方便的方法setTextCursorDrawable(@Nullable Drawable textCursorDrawable)
。我按以下方式使用它:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
textCursorDrawable = ContextCompat.getDrawable(context,R.drawable.drawable_cursor)!!.tintDrawable(color)
}
tintDrawable
方法的作用是:
private fun Drawable.tintDrawable(@ColorInt color: Int): Drawable {
return when (this) {
is VectorDrawableCompat -> this.apply { setTintList(ColorStateList.valueOf(color)) }
is VectorDrawable -> this.apply { setTintList(ColorStateList.valueOf(color)) }
else -> {
val wrappedDrawable = DrawableCompat.wrap(this)
DrawableCompat.setTint(wrappedDrawable, color)
DrawableCompat.unwrap(wrappedDrawable)
}
}
}
R.drawable.drawable_cursor
只是一个简单的矩形形状:
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<size android:width="2dp" />
<solid android:color="?android:textColorPrimary" />
</shape>
但是没有任何可见的效果。即使没有应用色彩滤镜,光标的drawable仍然保持不变。
文档中提到:
请注意,对游标Drawable进行的任何更改在隐藏游标然后再次绘制之前都不会可见。
所以我认为我需要手动隐藏光标,并通过 setCursorVisible
方法使其可见,但仍然没有效果。
有人有什么想法吗?我做错了什么吗?