2

コントロール (ヘッダーがクリックされたときに展開および縮小するパネル) を作成しようとしていますが、オンラインでコードを見つけました。コンストラクターでは、私は持っています

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 を初めて使用するので、属性処理コードで誰かが何かを見ることができますか?

4

2 に答える 2

2

理解した。結局のところ、属性はXMLで名前空間を指定する必要があります。置いた

<MyControl
    android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/drawer"
    header="@+id/header" content="@+id/drawerContent"...

しかし、それはする必要がありました

<MyControl xmlns:myPackage="http://schemas.android.com/apk/res/com.my.package"
    android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/drawer"
    myPackage:header="@+id/header" myPackage:content="@+id/drawerContent"

それらを追加した後、値は問題ないことがわかりました。

于 2011-08-31T14:25:00.193 に答える
0

values-> attrs.xml ファイルにリソースを追加しましたか?

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyControl">
    <attr name="headerId" format="integer" />
    </declare-styleable>
</resources>
于 2011-08-30T17:53:15.823 に答える