我制作材料设计风格应用
我想更改AutoCompleteTextView
样式
像android.support.v7.internal.widget.TintEditText
我在style.xml中添加了样式:
<style name="AppTheme" parent="AppTheme.Base"/>
<style name="AppTheme.Base" parent="Theme.AppCompat">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="android:autoCompleteTextViewStyle">@style/AutoCompleteTextViewAppTheme</item>
</style>
<style name="AutoCompleteTextViewAppTheme" parent="Base.Widget.AppCompat.EditText"/>
虽然有效,但线条颜色不会改变。
带有素材设计的EditTexts似乎使用colorControlActivated
和colorControlNormal
。因此,我试图在先前的样式定义中覆盖这些属性,但它没有效果
我需要做什么才能让它发挥作用?
答案 0 :(得分:5)
尝试以这种方式在xml中添加用于窗口小部件的所需样式:
<View
style="@style/NameOfYourTheme"
...
/>
如果这不起作用,您可以尝试自己设计样式。 您必须更改可以查找的here。
的TextView属性可以通过更改应添加到样式中的android:textColor
属性来更改实例的Textcolor,例如:
<style name="AutoCompleteTextViewAppTheme" parent="Base.Widget.AppCompat.EditText"/>
<item name="android:textColor">#ffffffff</item>
</style>
如果要更改edittext行,则必须更改背景属性,例如以这种方式:
<item name ="android:background="@drawable/line_background"> </item>
在drawables文件夹中添加一个新文件line_background.xml
,内容类似:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<stroke
android:color="#c0c000"
android:width="3dp"></stroke>
</shape>
答案 1 :(得分:3)
我已经创建了自定义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中使用如下:
<com.atrinax.gist.TintAutoComplete
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
此解决方案的缺点是它依赖于内部类
android.support.v7.internal.widget.TintTypedArray
将来可能会改变或变得不可用。 请看下面的Derek的答案 - 它解决了我的答案背景引起的问题。
答案 2 :(得分:2)
根据@ 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();
}
}