これはカスタム ビューです
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>
color
XML から静的を初期化する適切な方法を知りたいです。
私はすでに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
実際のインスタンス化とは無関係です。