以编程方式更改Android的EditText光标指针颜色

问题描述 投票:6回答:5

所以,我已经搜索了很多,但我找不到任何东西,如果这最终成为重复我很抱歉,但我想伪装EditText的光标指针的颜色,用于移动光标

enter image description here

我已经设法改变了光标颜色本身,但它不会影响指针,它似乎只响应重音颜色。

我很确定它是可能的,因为我记得看到一个应用程序执行它,它有指针和对话框中的所有元素根据您选择的颜色更改颜色而不更改对话框下方视图的强调颜色。

请帮忙 :)

android pointers colors android-edittext
5个回答
8
投票

您只能为此EditText创建自己的样式/主题并更改ColorAccent:

<style name="EditTextColorCustom" parent="@style/AppBaseTheme">
        <!-- Customize your theme here. -->
        <item name="colorAccent">@color/colorAccent</item>
    </style>

5
投票

您可以通过在style.xml中创建新样式来完成此操作

<style name="CustomEditTextTheme" parent="TextAppearance.AppCompat">
    <item name="colorAccent">@color/primary_dark_material_dark</item>       
</style>

然后在EditText标签中使用它

style="@style/CustomEditTextTheme"

1
投票

您可以使用反射来设置selectHandle。

EditText具有包含mSelectHandleCenter字段的Editor类(如果需要选择使用mSelectHandleLeft和mSelectHandleRight)

private fun setCursorPointerColor(view: EditText, @ColorInt color: Int) {
    try {
        //get the pointer resource id
        var field = TextView::class.java.getDeclaredField("mTextSelectHandleRes")
        field.isAccessible = true
        val drawableResId = field.getInt(view)

        //get the editor
        field = TextView::class.java.getDeclaredField("mEditor")
        field.isAccessible = true
        val editor = field.get(view)

        //tint drawable
        val drawable = ContextCompat.getDrawable(view.context, drawableResId)!!
        drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN)

        //set the drawable
        field = editor.javaClass.getDeclaredField("mSelectHandleCenter")
        field.isAccessible = true
        field.set(editor, drawable)

    } catch (ex: Exception) {
    }
}

1
投票

您可以在样式中将colorControlActivated添加到AppTheme:

<item name="colorControlActivated">"Your_color"</item>


0
投票

您可以使用textSelectHandle将其替换为您的drawable,如下所示:

android:textSelectHandle="@drawable/your_drawble"
© www.soinside.com 2019 - 2024. All rights reserved.