在我的项目(支持AppCompat的Target API 21)中,我需要扩展EditText
类。我的问题是MyEditText
类没有继承自定义的EditText
样式:
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar" >
<item name="colorPrimary">@color/primary</item>
<item name="colorControlNormal">@color/grey_light</item>
<item name="colorControlActivated">@color/primary</item>
<item name="colorControlHighlight">@color/primary</item>
</style>
@color/primary
绿色
截图:
EditText
专注EditText
未集中(启用)MyEditText
未集中(启用)我的问题是:如何在EditText
中继承默认的MyEditText
样式?
答案 0 :(得分:6)
有一种非常非常非常容易的方法。
继承此类并查看它是否有效,而不是继承自android.widget.EditText:
android.support.v7.internal.widget.TintEditText
链接到班级:TintEditText.java
阅读该课程的Javadoc,他说:
/**
* An tint aware {@link android.widget.EditText}.
* <p>
* This will automatically be used when you use {@link android.widget.EditText} in your
* layouts. You should only need to manually use this class when writing custom views.
*/
在此页面的(Using Support Library APIs)中有一个警告,即:在使用支持库中的类时,请确保从相应的包中导入该类。例如,在应用ActionBar类时:
我解释了这一点,也就是说,如果您使用的是支持库,请始终尝试导入或继承相应的包。 (没有比这更好的了解lol。:D)
答案 1 :(得分:3)
您可以使用样式
解决它在你的主题中
<style name="AppTheme.BaseNoActionBar" parent="Theme.AppCompat.Light">
<item name="android:editTextStyle">@style/Widget.EditText</item>
</style>
<!-- EditText style -->
<style name="Widget.EditText" parent="Widget.AppCompat.EditText">
<item name="android:textCursorDrawable">@drawable/cursor_gray</item>
<item name="android:background">@drawable/underline_gray</item>
</style>
然后定义光标
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<size android:width="1dp" />
<solid android:color="@color/lightGrayLabel" />
</shape>
和根据这个hack https://stackoverflow.com/a/20891131
的drawable<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:top="-6dp" android:left="-6dp" android:right="-6dp">
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent"/>
<stroke android:color="@color/lightGrayLabel" android:width="3dp"/>
</shape>
</item>
</layer-list>
我也尝试使用选择器作为“背景”字段,但它不适用于“android:state_selected”或“android:state_activated”
这是一个小例子