4

如果我子类化一个小部件,例如 EditText,我如何在其上应用样式?

例如,如果我的应用程序中有一个普通的 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 的所有实例?例如:

<style name="AppTheme" parent="android:Theme.Light">
    <item name="MyEditText">@style/Edit</item>
</style>

编辑: 澄清

并不是要添加新的属性,然后我就可以将其用于各种事情。

我正在寻找一种方法来简单地声明我希望MyEditText类型的所有小部件都具有由样式@style/Edit在应用程序范围内定义的默认外观。换句话说,就像您可以在主题中设置 EditText 的默认外观一样,如何以相同的方式设置 MyEditText 的默认外观?

4

1 回答 1

-1

您必须在自定义视图子类中使用接受 AttributeSet 参数的构造函数。然后你在一个 XML 文件中声明你的样式并像往常一样应用它们。在此处查看有关创建自定义视图类的开发人员页面。祝你好运!

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>
于 2012-12-03T02:22:41.740 回答