6

カスタム ビュー (ビューグループを拡張する) があり、 attrs.xmlで定義されたいくつかのカスタム属性を指定しました....

<declare-styleable name="datascope">
    <attr name="colcount" format="integer" />
    <attr name="titleheaderrows" format="integer" />
    <attr name="colheaderrows" format="integer" />
    <attr name="rowlayout" format="reference" />
</declare-styleable>

うまくピックアップできる整数ですが、最後のもの - rowlayout- 必要に応じて膨らませる追加のレイアウト ファイルを参照するために使用したいです。しかし、メイン レイアウト ファイルで rowlayout 属性を表現する正しい方法が見つかりません。私が試してみました:

lui:rowlayout="@layout/sensorvaluesdata">

しかし、これは実行時に失敗します:

E/AndroidRuntime(22092): 原因: java.lang.NumberFormatException: 「res/layout/sensorvaluesdata.xml」を整数として解析できません

lui:rowlayout="?layout/sensorvaluesdata"

失敗する

E/AndroidRuntime(22341): 原因: java.lang.NumberFormatException: '?2130903043' を整数として解析できません

興味深いのは、リソース ID がそこに貼り付けられているように見えますが?、先頭にも a が貼り付けられているようです。

私のR.javaファイルには、sensorvaluesdata.

public static final class layout {

    public static final int sensorvaluesdata=0x7f030003;

}

これを行う正しい方法は何ですか?

(情報をJavaソースにハードコーディングでき、正常に動作します....

View vx = li.inflate(R.layout.sensorvaluesdata, this, false);
4

1 に答える 1

5

他の誰かのためにもう少し背景を追加するだけです。コードでは、このようなものを使用します

LinearLayout ViewContainer=(LinearLayout) (LayoutInflater.from(context)).inflate(
    attributes.getResourceId(
        R.styleable.[styleableName]_[attributeName], 
        R.layout.[defaultValue]), 
    null);

あなたのスタイル可能な名前の下のxml属性で...

<attr name="layout" format="reference"/>
于 2012-08-16T17:05:02.310 に答える