1. ホーム
  2. android

[解決済み] Androidのカスタムビューには3つすべてのコンストラクタが必要ですか?

2022-04-28 09:58:05

質問

カスタムビューを作成する際、多くの人がこのように行っているようなのですが。

public MyView(Context context) {
  super(context);
  // this constructor used when programmatically creating view
  doAdditionalConstructorWork();
}

public MyView(Context context, AttributeSet attrs) {
  super(context, attrs);
  // this constructor used when creating view through XML
  doAdditionalConstructorWork();
}

private void doAdditionalConstructorWork() {

  // init variables etc.
}

最初の疑問は、コンストラクタの MyView(Context context, AttributeSet attrs, int defStyle) ? どこで使われているのかわからないのですが、スーパークラスで見かけます。 それは必要ですか、そしてどこで使われていますか?

そこに この質問に対するもう一つの答え .

解決方法を教えてください。

もし、あなたがカスタム View から xml も好きです。

 <com.mypack.MyView
      ...
      />

を使用する場合は、コンストラクタ public MyView(Context context, AttributeSet attrs) そうでない場合は Exception を膨らませようとするとき、Androidは View .

もし、あなたが View から xml を指定し、さらに android:style のような属性があります。

 <com.mypack.MyView
      style="@styles/MyCustomStyle"
      ...
      />

2番目のコンストラクタも呼び出され、デフォルトのスタイルが MyCustomStyle 明示的なXML属性を適用する前に。

3 番目のコンストラクタは、通常、アプリケーション内のすべての View が同じスタイルになるようにする場合に使用します。