24

所以我用Holo Colors GeneratorAction Bar Style Generator将 Holo Theme 的样式更改为我自己的颜色。但是当我在编辑文本中选择文本时,所选位置的“标记”仍然是蓝色的。我怎样才能改变它?

剩下中间正确的

4

7 回答 7

38

这里最糟糕的部分是找到该项目的“名称”以及如何在主题中调用它。所以我查看了android SDK文件夹中的每个drawable,最后找到了名为“text_select_handle_middle”、“text_select_handle_left”和“text_select_handle_right”的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>
于 2013-02-28T11:07:41.127 回答
13

如何从代码中做到这一点:

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) {
}
于 2014-12-05T00:53:22.290 回答
13

我意识到这真的很晚了,但是如果您只想更改句柄的颜色,您只需将以下内容添加到您的 styles.xml 文件中。

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

然后只需将主题设置在EditText您想要影响的任何活动上。

或者,如果您想在应用范围内设置它,您可以执行以下操作:

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

并为整个应用程序设置该主题。

问题解决了!

于 2016-11-28T16:57:42.573 回答
7

为了更改选择句柄的颜色,您必须在应用主题中覆盖激活的颜色:

<style name="MyCustomTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:colorControlActivated">@color/customActivatedColor</item>
</style>
于 2017-01-26T11:10:05.703 回答
2

您可以在http://androiddrawables.com/Other.html中看到这些属性。

更改您的 values/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 指针颜色(不是光标)以获取其他解决方案。

于 2015-12-08T16:44:07.327 回答
1

对于那些尝试通过代码处理此问题的人,您可以使用 Jared Rummler 提供的 API 版本小于或等于 28 的答案,但从 Android Q(API 29) 开始,他们添加了 @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P ) 注释,它似乎不适用于 Q+。相反,添加到 EditText 的新方法:

setTextSelectHandle(R.drawable.test);
setTextSelectHandleLeft(R.drawable.test);
setTextSelectHandleRight(R.drawable.test);

因此,要使其正常工作,您可以执行以下操作:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                setTextSelectHandle(R.drawable.test);
                setTextSelectHandleLeft(R.drawable.test);
                setTextSelectHandleRight(R.drawable.test);
            } else {
                try {
                    final Field fEditor = TextView.class.getDeclaredField("mEditor");
                    fEditor.setAccessible(true);
                    final Object editor = fEditor.get(this);

                    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 = getResources();

                    fSelectHandleLeft.set(editor, res.getDrawable(R.drawable.test, null));
                    fSelectHandleRight.set(editor, res.getDrawable(R.drawable.test, null));
                    fSelectHandleCenter.set(editor, res.getDrawable(R.drawable.test, null));
                } catch (final Exception ignored) {
                }
            }
于 2020-07-27T18:42:50.560 回答
0

如果您只想在一个 EditText 上隐藏指针,您可以仅为它设置主题:

样式.xml

<style name="TransparentPointerEditText">
    <item name="colorControlActivated">@android:color/transparent</item>
</style>

用法

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:theme="@style/TransparentPointerEditText" />
于 2021-11-18T14:24:34.850 回答