Для API < Android Q Я использую отражение, и оно работает так, как задумано. Начиная с 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)
}
Код: Выделить всё
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)
}
}
}
Код: Выделить всё
В документации упоминается, что
Обратите внимание, что любое изменение применено к курсору. Возможность рисования не будет видна, пока курсор не будет скрыт, а затем нарисован снова.
Поэтому я подумал, что мне нужно вручную скрыть курсор и сделать его виден через метод setCursorVisible, но все еще нет эффект.
Есть ли у кого-нибудь идеи, что я делаю неправильно?
Подробнее здесь: https://stackoverflow.com/questions/646 ... d-on-api-q
Мобильная версия