以编程方式更改EditText的下划线颜色

时间:2016-11-28 06:08:13

标签: android

我有一个普通的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 - 而非我想要的内容!

如何以编程方式更改EditTextAppCompatEditTextTextInputEditText的下划线颜色?我使用的是支持库版本25.0.1。

4 个答案:

答案 0 :(得分:19)

@degs的回答是正确的。但只需添加一个小注释:AppCompatEditText#setSupportBackgroundTintList现在使用@RestrictTo(LIBRARY_GROUP)进行注释,这意味着:

  

Restrict usage to code within the same group of libraries

而是使用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

这对我有用