1

これはカスタム ビューです

public class MyView extends Button {
    private static int color;

    . . . 
}

この XML は MyView を数回インスタンス化します

<LinearLayout . . .>

    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />
    <com.example.test.MyView . . . />

</LinearLayout>

colorXML から静的を初期化する適切な方法を知りたいです。
私はすでに1つの解決策を知っています(しかし、別の推奨される方法があるのだろうか):

  • カスタム属性を定義する
<declare-stylable name=MyView>
    <attr name="color" format="integer" />
</declare-stylable>
  • いずれかのインスタンス化でカスタム属性を使用しますMyView
<com.example.test.MyView
    app:color="@color/red"
    . . ./>
  • MyView コンストラクター中に静的フィールドを設定する

TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyView, defStyle, 0);
int c = a.getInteger(R.styleable.MyView_color, -1);
if( c != -1 ) 色 = c;

このソリューションについて私が気に入らない唯一のことは、MyViewインスタンス化に依存していることです。通常、コードでは、静的フィールドとメソッドに個別にアクセスできます。 static フィールドも、MyView実際のインスタンス化とは無関係です。

4

0 に答える 0