使用 appcompat v7 更改 EditText 底线颜色

我正在使用appcompat v7来获得Android 5及更少版本的外观一致。它工作得很好。但是,我无法弄清楚如何更改EditTexts的底线颜色和主题色。可能吗?

我试图定义一个自定义(参见下面),但我只成功地改变了完整的背景色或文本颜色,但没有更改底线或主题色。是否有要使用的特定属性值?我是否必须通过属性使用自定义可绘制图像?是否无法在六角形中指定颜色?android:editTextStyleandroid:background

 <style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
     <item name="android:editTextStyle">@style/Widget.App.EditText</item>
 </style>

 <style name="Widget.App.EditText" parent="Widget.AppCompat.EditText">
     ???
 </style>

根据android API 21的来源,具有材料设计的EditTexts似乎使用和.因此,我试图在前面的样式定义中覆盖这些属性,但它不起作用。可能appcompat不使用它。不幸的是,我找不到最新版本的appcompat与材料设计的来源。colorControlActivatedcolorControlNormal


答案 1

最后,我找到了一个解决方案。它只是包括覆盖 的应用主题定义中的 值,而不是编辑文本样式。然后,考虑将这个主题用于您想要的任何活动。下面是一个示例:colorControlActivatedcolorControlHighlightcolorControlNormal

<style name="Theme.App.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorControlNormal">#c5c5c5</item>
    <item name="colorControlActivated">@color/accent</item>
    <item name="colorControlHighlight">@color/accent</item>
</style>

答案 2

我觉得这需要一个答案,以防有人只想更改一个编辑文本。我这样做是这样的:

editText.getBackground().mutate().setColorFilter(ContextCompat.getColor(context, R.color.your_color), PorterDuff.Mode.SRC_ATOP);

推荐