不幸的是,即使在兼容性库中,Google 也没有将 xml 属性公开给 tint 或设置这些可绘制对象的方法,因此目前动态设置它们的唯一方法是通过上述反射。
但是,您可以在 xml 中设置可绘制对象,如果您只想为现有的材料设计可绘制对象着色,可以通过为文本选择句柄着色 xml 来完成,因为它们是位图可绘制对象,但光标可绘制对象是插图可绘制,因此必须从源代码重新创建。
使用的drawables是:
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 文件夹中,并在您的 AppCompatEditText xml 定义中引用它们:
android:textCursorDrawable
android:textSelectHandle
android:textSelectHandleLeft
android:textSelectHandleRight
瞧,自定义颜色光标和选择手柄与默认材料设计版本完全匹配,避免反射,因此不会导致警告或错误。