使用AppCompat.EditText设置AutoCompleteTextView样式不起作用

我做材料设计风格的应用

我想更改AutoCompleteTextView样式
android.support.v7.internal.widget.TintEditText样式

我在style.xml中添加了样式:

   @color/colorPrimary @color/colorPrimaryDark @style/AutoCompleteTextViewAppTheme   

这可行,但线条颜色不会改变。 在此处输入图像描述

具有材质设计的EditTexts似乎使用colorControlActivatedcolorControlNormal 。 因此,我试图在先前的样式定义中覆盖这些属性,但它没有任何效果。
我需要做什么才能让它发挥作用?

尝试以这种方式添加所需的样式以用于xml中的窗口小部件:

  

如果这不起作用,你可以尝试自己设计。 您必须更改可在此处查找的TextView属性。

可以通过更改应添加到样式的android:textColor属性来更改实例的Textcolor,例如:

  #ffffffff  

如果要更改edittext行,则必须更改背景属性,例如以这种方式:

   

并在drawables文件夹中添加一个具有类似内容的新文件line_background.xml

     

我已经创建了自定义Tint Aware AutoCompleteTextView来解决这个问题。

 package com.atrinax.gist; import android.content.Context; import android.support.v7.internal.widget.TintTypedArray; import android.util.AttributeSet; import android.widget.AutoCompleteTextView; public class TintAutoComplete extends AutoCompleteTextView { private static final int[] TINT_ATTRS = { android.R.attr.background }; public TintAutoComplete(Context context) { this(context, null); } public TintAutoComplete(Context context, AttributeSet attrs) { this(context, attrs, android.R.attr.editTextStyle); } public TintAutoComplete(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs, TINT_ATTRS, defStyleAttr, 0); setBackgroundDrawable(a.getDrawable(0)); a.recycle(); } } 

将此类添加到项目中。 在xml中使用如下:

  

该解决方案的缺点是它依赖于内部类

 android.support.v7.internal.widget.TintTypedArray 

可能会在未来改变或变得不可用。 请看下面的Derek的答案 – 它解决了我的答案产生的背景问题。

根据@ Atrinax的答案推断,这是一个将通过扩展AutoCompleteTextView并将其添加到TINT_ATTRS来处理popupBackground属性的类。

 public class TintAutoCompleteTextView extends AutoCompleteTextView { private static final int[] TINT_ATTRS = { android.R.attr.background, android.R.attr.popupBackground }; public TintAutoCompleteTextView(Context context) { this(context, null); } public TintAutoCompleteTextView(Context context, AttributeSet attrs) { this(context, attrs, android.R.attr.autoCompleteTextViewStyle); } public TintAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs, TINT_ATTRS, defStyleAttr, 0); setBackgroundDrawable(a.getDrawable(0)); setDropDownBackgroundDrawable(a.getDrawable(1)); a.recycle(); } }