К сожалению, Google не выставил атрибуты xml для tint или методы для установки их для рисования даже в библиотеках совместимости, поэтому в настоящее время единственный способ их динамической установки - это отражение, как описано.
Тем не менее, вы можете установить рисование в xml, и если вы просто хотите подкрасить существующие рисунки дизайна материала, это можно сделать, подкрашивая xml для маркеров выбора текста, так как они являются растровыми, но курсор можно нарисоватьэто вставка для рисования, поэтому ее нужно будет воссоздать из исходного кода.
Используются следующие рисунки:
R.drawable.abc_text_select_handle_left_mtrl_light
R.drawable.abc_text_select_handle_middle_mtrl_light
R.drawable.abc_text_select_handle_right_mtrl_light
R.drawable.abc_text_cursor_material
Вы можете создавать тонированные версии рисования дескриптора выбора текста следующим образом:
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/abc_text_select_handle_left_mtrl_light"
android:tint="@color/my_text_select_handle_color" />
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/abc_text_select_handle_middle_mtrl_light"
android:tint="@color/my_text_select_handle_color" />
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/abc_text_select_handle_right_mtrl_light"
android:tint="@color/my_text_select_handle_color" />
Рисованный курсор может быть воссоздан из исходного кода следующим образом:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="2dp">
<shape
android:tint="@color/my_text_cursor_color"
android:shape="rectangle">
<size
android:height="2dp"
android:width="2dp" />
<solid
android:color="@color/white" />
</shape>
</inset>
Поместите их в папку drawables и ссылайтесь на них в определении xml AppCompatEditText, используя:
android:textCursorDrawable
android:textSelectHandle
android:textSelectHandleLeft
android:textSelectHandleRight
и вуаля, пользовательский цветной курсор и маркеры выбора, которые точно соответствуют версии дизайна материала по умолчанию, которая позволяет избежать отражения, поэтому не вызовет предупреждений или ошибок.