コントロール (ヘッダーがクリックされたときに展開および縮小するパネル) を作成しようとしていますが、オンラインでコードを見つけました。コンストラクターでは、私は持っています
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyControl);
...
int headerId = array.getResourceId(R.styleable.MyControl_header, -1);
コントロールは、次の XML を使用してレイアウト ファイルに作成されています。
<MyControl
android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/drawer"
header="@+id/header" content="@+id/drawerContent"
android:layout_below="@id/contentContainer" android:background="#00FF00">
<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@id/header"
android:text="This is a header"/>
<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@id/drawerContent"
android:text="@string/sample_text" />
</MyControl>
問題は、getResourceId()
-1 が返されることです (つまり、属性に設定されたリソースが見つからないようです)。
理由はありますか?
編集: 私の attrs.xml ファイルを含めるのを忘れました:
<resources>
<declare-styleable name="MyControl">
<attr name="collapsedHeight" format="dimension" />
<attr name="header" format="reference" />
<attr name="content" format="reference" />
<attr name="animationDuration" format="integer" />
</declare-styleable>
編集 2: どういうわけか、他の属性をチェックすることは考えていませんでした。追加した他の属性がいくつかありました。デバッガーでも値を確認しましたが、デフォルトになっているようです。したがってgetResourceId
、それは問題ではなく、一般的に属性を取得する方法に関係しています。私は Android を初めて使用するので、属性処理コードで誰かが何かを見ることができますか?