Как изменить цвет/внешний вид элемента управления EditText/anchor?
Итак, я изменил стиль темы Holo с генератором голой цветности и Action Bar Style Generator для моего собственного цвета. Но когда я выбираю текст внутри текста редактирования, "маркеры" в выбранных позициях по-прежнему остаются синими. Как я могу его изменить?
![Left]()
![Middle]()
![Right]()
Ответы
Ответ 1
Худшая часть здесь заключалась в том, чтобы найти "имя" для этого элемента и как оно вызвано внутри темы. Поэтому я просмотрел все доступные в папке SDK Android и, наконец, нашел выделенные элементы с именем "text_select_handle_middle", "text_select_handle_left" и "text_select_handle_right".
Итак, решение прост: добавьте эти чертежи с индивидуальным дизайном/цветом в свою папку с возможностью рисования и добавьте их в определение стиля темы, например:
<style name="MyCustomTheme" parent="@style/MyNotSoCustomTheme">
<item name="android:textSelectHandle">@drawable/text_select_handle_middle</item>
<item name="android:textSelectHandleLeft">@drawable/text_select_handle_left</item>
<item name="android:textSelectHandleRight">@drawable/text_select_handle_right</item>
</style>
Ответ 2
как это сделать из кода?
try {
final Field fEditor = TextView.class.getDeclaredField("mEditor");
fEditor.setAccessible(true);
final Object editor = fEditor.get(editText);
final Field fSelectHandleLeft = editor.getClass().getDeclaredField("mSelectHandleLeft");
final Field fSelectHandleRight =
editor.getClass().getDeclaredField("mSelectHandleRight");
final Field fSelectHandleCenter =
editor.getClass().getDeclaredField("mSelectHandleCenter");
fSelectHandleLeft.setAccessible(true);
fSelectHandleRight.setAccessible(true);
fSelectHandleCenter.setAccessible(true);
final Resources res = context.getResources();
fSelectHandleLeft.set(editor, res.getDrawable(R.drawable.text_select_handle_left));
fSelectHandleRight.set(editor, res.getDrawable(R.drawable.text_select_handle_right));
fSelectHandleCenter.set(editor, res.getDrawable(R.drawable.text_select_handle_middle));
} catch (final Exception ignored) {
}
Ответ 3
Я понимаю, что это очень поздно, но если все, что вы хотите сделать, это изменить цвет дескриптора, вам просто нужно добавить следующее в ваш файл styles.xml.
<style name="ColoredHandleTheme">
<item name="colorControlActivated">@color/colorYouWant</item>
</style>
А затем просто установите тему на любую активность, удерживая EditText
, на которую вы хотите повлиять.
Или, если вы хотите установить его в приложение, вы можете сделать следующее:
<style name="ColoredHandleThemeForWholeApp">
<item name="colorAccent">@color/colorYouWant</item>
</style>
И установите эту тему для всего приложения.
Проблема решена!
Ответ 4
Вы можете увидеть эти атрибуты в http://androiddrawables.com/Other.html.
Измените свои значения /styles.xml, например:
<style name="AppTheme.Cursor" parent="AppTheme">
<item name="colorAccent">@color/cursor</item>
</style>
где @color/cursor добавлен в значения /color.xml. После этого примените стиль к активности:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.AppTheme_Cursor);
...
Посетите Как изменить цвет указателя EditText (не курсор) для других решений.
Ответ 5
Чтобы изменить цвет ручек выбора, вы должны переопределить активированный цвет в теме приложения:
<style name="MyCustomTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="android:colorControlActivated">@color/customActivatedColor</item>
</style>