How to change color of EditText handles?

帅比萌擦擦* 提交于 2019-12-28 06:46:50

问题


Where does the green color comes from? I've tried changing the accentColor attribute, which works in other parts of the app, but not here.

Screenshot from app in Lollipop.

How can I change the colors of:

  • the text handle drawables? how to tint them?
  • the select-all-background color?

And maybe some tips for the future... How did you find out? I've been coming across all these confusing color/styling problems. Is there some kind of list somewhere that tells me, which default color or attribute that I need to overwrite for a certain component?


回答1:


For changing the handle color you can do as specified here you do it using style as

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

For doing it programmatically check same question another reply here which is done using reflection

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) {
}

For changing the selected text color you can set textColorHighlight in xml as

android:textColorHighlight="#ff0000"

through style you can do as

<item name="android:textColorHighlight">@color/m_highlight_blue</item>



回答2:


Make changes to your styles.xml as follows

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorControlHighlight">@color/accent_translucent</item>
    <item name="android:colorControlHighlight">@color/accent_translucent</item>
    <item name="colorAccent">@color/accent</item>
    <item name="selectableItemBackground">@drawable/selectable_item_background</item>
    <item name="android:selectableItemBackground">@drawable/selectable_item_background</item>

</style>

<color name="primary">#00BCD4</color>
<color name="primary_dark">#0097A7</color>
<color name="accent">#FFEB3B</color>
<color name="accent_translucent">#80FFEB3B</color>
<color name="accent_bright">#FFF493</color>

Or you can add a XML attribute to your EditText

android:textColorHighlight="@color/accent_translucent"

Hope it solves your problem.



来源:https://stackoverflow.com/questions/29795197/how-to-change-color-of-edittext-handles

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!