Android自定义布局属性“引用属性”格式?

时间:2012-03-01 18:26:23

标签: android android-layout custom-controls android-xml declare-styleable

我有一个自定义视图(扩展了视图组),我已经指定了一些在 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卡在那里,但也在前面卡住?

我的 R.java 文件确实有sensorvaluesdata的明显行。

public static final class layout {

    public static final int sensorvaluesdata=0x7f030003;

}

这样做的正确方法是什么?

(我可以将信息硬编码到java源代码中,并且工作正常....

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

1 个答案:

答案 0 :(得分:5)

只为其他人添加更多背景信息。在代码中使用类似这样的东西

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

在您的可设置名称下的xml属性中......

<attr name="layout" format="reference"/>