如果我将小部件子类化,例如EditText,我该如何在其上应用样式?
E.g。如果我在我的应用程序中有一个简单的EditText,我可以在style.xml中执行以下操作并更改EditText的所有实例的外观:
<style name="AppTheme" parent="android:Theme.Light">
<item name="android:editTextStyle">@style/Edit</item>
</style>
<style name="Edit" parent="@android:style/Widget.EditText">
<item name="android:background">@drawable/edit</item>
</style>
但是,如果我已经将EditText子类化并且有一个类MyEditText,那么如何将样式设置为MyEditText的所有实例? E.g:
<style name="AppTheme" parent="android:Theme.Light">
<item name="MyEditText">@style/Edit</item>
</style>
编辑: 澄清
我不尝试添加新属性,然后我可以将其用于各种事情。
我正在寻找一种简单说明我希望 MyEditText 类型的所有小部件都具有由范围 @ style / Edit 定义的默认appearan的方法申请。换句话说,就像您可以在主题中设置EditText的默认外观一样,如何以相同的方式设置MyEditText的默认外观?
答案 0 :(得分:-1)
您必须使用在自定义视图子类中接受AttributeSet参数的构造函数。然后在XML文件中声明样式并像往常一样应用它们。请参阅developer page about Creating a Custom View Class here。祝你好运!
class CustomView extends View {
public CustomView(Context ctx, AttributeSet attrs) {
super(ctx, attrs);
}
}
在attrs.xml(或任何名称)中定义可设置属性的位置
<resources>;
<declare-styleable name="CustomView">
<attr name="showText" format="boolean" />
<attr name="labelPosition" format="enum">
<enum name="left" value="0"/>
<enum name="right" value="1"/>
</attr>
在您的xml中,您可以包含这些属性
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews">
<com.example.customviews.CustomView
custom:showText="true"
custom:labelPosition="left" />
</LinearLayout>