it-swarm.com.ru

Как изменить цвет / внешний вид EditText выбрать дескриптор / якорь?

Поэтому я изменил стиль темы Holo с помощью Генератор цветов Holo и Генератор стилей панели действий на свой собственный цвет. Но когда я выбираю текст внутри редактируемого текста, "маркеры" в выбранных позициях по-прежнему синие. Как я могу это изменить?

LeftMiddleRight

15
jimpic

Хуже всего было найти "имя" для этого предмета и то, как он называется внутри темы. Поэтому я просмотрел все элементы рисования в папке Android SDK и, наконец, обнаружил объекты с именами "text_select_handle_middle", "text_select_handle_left" и "text_select_handle_right".

Таким образом, решение простое: добавьте эти drawables с индивидуальным дизайном/цветом в вашу папку drawable и добавьте их в определение стиля темы, например:

<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>
33
jimpic

как это сделать из кода?

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) {
}
11
Jared Rummler

Я признаю, что это действительно поздно, но если все, что вам нужно, это изменить цвет дескриптора, вам просто нужно добавить следующее в ваш файл styles.xml.

<style name="ColoredHandleTheme">
    <item name="colorControlActivated">@color/colorYouWant</item>
</style>

А затем просто установите тему для любого действия, содержащего EditText, на которое вы хотите повлиять.

Или, если вы хотите установить его для всего приложения, вы можете сделать следующее:

<style name="ColoredHandleThemeForWholeApp">
    <item name="colorAccent">@color/colorYouWant</item>
</style>

И установить эту тему для всего приложения.

Задача решена!

7
LukeWaggoner

Чтобы изменить цвет выбранных маркеров, вы должны переопределить активированный цвет в теме вашего приложения:

<style name="MyCustomTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="Android:colorControlActivated">@color/customActivatedColor</item>
</style>
2
Mehmed Mert

Вы можете увидеть эти атрибуты в http://androiddrawables.com/Other.html .

Измените значения/styles.xml, например:

<style name="AppTheme.Cursor" parent="AppTheme">
    <item name="colorAccent">@color/cursor</item>
</style>

где @ color/cursor добавляется в values ​​/ color.xml. После этого примените стиль к упражнению:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.AppTheme_Cursor);
    ...

Посетите Как изменить цвет указателя EditText (не курсор) для других решений.

1
CoolMind