我有一个普通的EditText
字段,我想以编程方式更改下划线颜色。
<EditText
android:id="@+id/edit_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"/>
其他答案建议更改背景颜色过滤器,如下所示:
editText.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN);
但是,当我运行应用时,我看不到任何变化。改变背景本身:
editText.setBackground(color)
将整个EditText
更改为color
- 而非我想要的内容!
如何以编程方式更改EditText
,AppCompatEditText
或TextInputEditText
的下划线颜色?我使用的是支持库版本25.0.1。
答案 0 :(得分:19)
@degs的回答是正确的。但只需添加一个小注释:AppCompatEditText#setSupportBackgroundTintList
现在使用@RestrictTo(LIBRARY_GROUP)
进行注释,这意味着:
而是使用ViewCompat#setBackgroundTintList
。所以在你的例子中,它应该是这样的:
ColorStateList colorStateList = ColorStateList.valueOf(color);
ViewCompat.setBackgroundTintList(editText, colorStateList);
答案 1 :(得分:18)
您需要将backgroundTintList
上的supportBackgroundTintList
(或EditText
)设置为ColorStateList
的实例,其中仅包含您要将色调更改为的颜色。以向后兼容的方式执行此操作的简单方法如下所示:
ColorStateList colorStateList = ColorStateList.valueOf(color)
editText.setSupportBackgroundTintList(colorStateList)
这将为EditText
提供所需的下划线颜色。
答案 2 :(得分:0)
可以使用ColorFilter类和其他方式以编程方式更改EditText下划线的颜色,但是您将遇到API级别问题。解决这些类型问题的最佳方法是使用9-Patch映像。
Google Sign-In for Web guide
在这里下载一组drawable并将它们放在drawable文件夹中并以编程方式更改EditText的背景(et_joker.setBackground(your_drawable);
这将与API级别无关。
答案 3 :(得分:-1)
当焦点对准编辑文本时,我无法使其与以上解决方案一起使用。
我必须在主题中添加 colorControlActivated 。
.../slug-1
这对我有用