如何在Android中更改EditText的焦点颜色

40

如何更改EditText框中的聚焦颜色(橙色)?

聚焦颜色是整个控件周围的小边框,在控件获得焦点时呈亮橙色。如何将聚焦颜色更改为其他颜色?

3个回答

65
你需要创建/修改自己的NinePatch图片来替换默认的图片,并将其用作EditText的背景。如果你在SDK文件夹下找到你的平台,然后找到res/drawable文件夹,你应该会找到EditText焦点状态的NinePatch图片。如果你只想改变这个,你可以把它导入到Photoshop或其他图像编辑软件中,将橙色更改为你选择的颜色。然后将其保存到drawable文件夹中,并构建一个新的StateListDrawable,例如以下内容: edittext_modified_states.xml
<?xml version="1.0" encoding="utf-8"?>
<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <item 
        android:state_pressed="true"
        android:drawable="@android:drawable/edittext_pressed" 
        /> <!-- pressed -->    
    <item 
        android:state_focused="true"
        android:drawable="@drawable/edittext_focused_blue" 
        /> <!-- focused -->    
    <item 
        android:drawable="@android:drawable/edittext_normal" 
        /> <!-- default -->
</selector>

我不知道默认的NinePatches EditText的实际名称,所以根据需要替换它们,但关键在于只需使用那些未修改的@android:drawable图像(或者复制到您项目的drawable文件夹中),然后使用修改后的可绘制对象来表示聚焦状态。

然后,您可以将此StateListDrawable设置为TextView的背景,如下所示:

<TextView
    android:background="@drawable/edittext_modified_states"

这个解决方案适用于哪个Android版本?我尝试在Android 2.1中更改颜色,但似乎其中的名称和xml文件不同。我理解这个想法,但随着我一直面对着大量错误,我的挫败感越来越强烈。 - zaplec
在2.1版本中,我不得不将未修改的普通状态图片复制到应用程序的drawable文件夹中才能使其正常工作。因此,在我的应用程序的drawable文件夹中,我有修改后的焦点状态图片以及未修改的原始其他状态图片。现在它可以正常工作了。 - zaplec
可能不会起作用,就像我说的那样,你可能需要将它们复制到你的文件夹中(因为看起来你已经这样做了);这只是我脑海中的一个解决方案。 :) - Kevin Coppock

2

你不需要创建XML绘图。在代码中可能更简单。 Kotlin示例:

editText.onFocusChangeListener = OnFocusChangeListener { _, hasFocus ->
    // colorLine, colorLineFocus is vars of ColorStateList
    ViewCompat.setBackgroundTintList(editText, if (hasFocus) colorLineFocus else colorLine)
}

1
<?xml version="1.0" encoding="utf-8"?>
<selector 
xmlns:android="http://schemas.android.com/apk/res/android"
>
    <item 
      android:state_pressed="true"
      android:color="colorcode" 
    /> <!-- pressed -->    
    <item 
       android:state_focused="true"
       android:color="colorcode"
    /> <!-- focused -->    
    <item 
           android:color="colorcode"
    /> <!-- default -->
</selector>

1
这段代码无法运行,显示以下错误信息:“02-07 03:45:01.131: E/AndroidRuntime(2911): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #8: <item> tag requires a 'drawable' attribute or child tag defining a drawable”。 - Anand Phadke
尝试使用<item drawable="@color/colorcode">代替android:color - sent1nel
@andrewww 在 res/color 文件夹中创建 color.xml,并尝试使用 android:color="@color/colorname" - Ketan Ahir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接