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

时间:2016-02-23 16:47:33

标签: android pointers colors android-edittext

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

enter image description here

我已经设法改变了光标的颜色,但它并没有影响指针,它似乎只响应了accentColor。

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

请帮助:)

5 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:5)

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

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

然后在EditText标签中使用此

style="@style/CustomEditTextTheme"

答案 2 :(得分: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) {
    }
}

答案 3 :(得分:0)

您可以使用textSelectHandle将其替换为您的drawable:

android:textSelectHandle="@drawable/your_drawble"

答案 4 :(得分:0)

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

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