Как изменить цвет/внешний вид элемента управления EditText/anchor? - программирование
Подтвердить что ты не робот

Как изменить цвет/внешний вид элемента управления EditText/anchor?

Итак, я изменил стиль темы Holo с генератором голой цветности и Action Bar Style Generator для моего собственного цвета. Но когда я выбираю текст внутри текста редактирования, "маркеры" в выбранных позициях по-прежнему остаются синими. Как я могу его изменить?

LeftMiddleRight

4b9b3361

Ответ 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>