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 に答える