2

次のコンストラクターを使用してカスタムViewサブクラスを作成しました。

public MyCustomView(Context context, AttributeSet attrs)
{
    super(context, attrs);

    // get custom "thingy" attribute specified in XML
    int thingy = attrs.getAttributeIntValue(MY_NAMESPACE, "thingy", 0);

    //rest of constructor
    ...
}

ご覧のとおり、XML属性からカスタムの「thingy」属性を取得します。これは完全に正常に機能し、これまでのところ問題はありません。それでは、なぜGoogleは、カスタムビューのXML属性をdeclare-styleablein res/values/attrs.xml(ここで説明で定義し、それらを呼び出すcontext.getTheme().obtainStyledAttributes()ここで説明)を使用して適用するように指示するのですか?

4

1 に答える 1

3

私はダムです。私が投稿した2番目のリンクはその理由を説明しています。

ビューがXMLレイアウトから作成されると、XMLタグ内のすべての属性がリソースバンドルから読み取られ、属性セットとしてビューのコンストラクターに渡されます。AttributeSetから値を直接読み取ることは可能ですが、これにはいくつかの欠点があります。

  • 属性値内のリソース参照は解決されません
  • スタイルは適用されません

代わりに、AttributeSetをgetStyledAttributes()に渡します。このメソッドは、すでに逆参照およびスタイル設定されている値のTypedArray配列を返します。

于 2013-01-03T16:00:35.767 に答える