如何更改EditText手柄的颜色?

问题描述 投票:0回答:3

绿色从何而来?我尝试更改

accentColor
属性,该属性适用于应用程序的其他部分,但不适用于此处。

editText Colors Lollipop 中应用程序的屏幕截图。

如何更改以下颜色:

  • 文本句柄可绘制对象?如何给它们上色?
  • 全选背景颜色?

也许还有一些对未来的提示......你是怎么发现的?我遇到过所有这些令人困惑的颜色/样式问题。是否有某种列表告诉我,我需要为某个组件覆盖哪些默认颜色或属性?

android android-edittext android-styles
3个回答
13
投票

要更改手柄颜色,您可以按照指定的方式进行操作此处,您可以使用样式进行操作

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

要以编程方式执行此操作,请检查同一问题的另一个回复here,这是使用反射完成的

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

要更改所选文本颜色,您可以在 xml 中将

textColorHighlight
设置为

android:textColorHighlight="#ff0000"

通过风格,你可以做到

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

4
投票

对 styles.xml 进行如下更改

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

或者您可以向 EditText 添加 XML 属性

android:textColorHighlight="@color/accent_translucent"

希望它能解决您的问题。


0
投票

现在这太基本了,只需使用这个:

myEditText.textSelectHandleLeft?.mutate()
                ?.setTint(ContextCompat.getColor(context, R.color.yourColor))
    
myEditText.textSelectHandleRight?.mutate()
                ?.setTint(ContextCompat.getColor(context, R.color.yourColor))
    
myEditText.textSelectHandle?.mutate()
                ?.setTint(ContextCompat.getColor(context, R.color.yourColor))

光标颜色:

editText.textCursorDrawable?.mutate()?.setTint(context.getColor(R.color.base_blue_700))

或 XML 解决方案:

<com.google.android.material.textfield.TextInputEditText
            android:id="@+id/input"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:maxLines="1"
            android:textSelectHandle="@color/white" -> HERE
            android:textSelectHandleLeft="@color/white" -> HERE
            android:textSelectHandleRight="@color/white" -> HERE
            android:fontFamily="@font/montserrat_semibold"
            android:textAlignment="textStart"
            android:textColor="@color/text_color_100"
            android:textSize="14sp" />

它将提供您可以在不更改可绘制的情况下更改颜色

© www.soinside.com 2019 - 2024. All rights reserved.