【问题标题】:Android custom layout attribute "reference attribute" format?Android自定义布局属性“引用属性”格式?
【发布时间】:2012-03-01 18:26:23
【问题描述】:

我有一个自定义视图(扩展了视图组),并且我指定了一些在 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);

【问题讨论】:

  • 这很奇怪,刚才又试了一次,一切正常。我已经检查过,一切看起来都一样,并且在原始帖子之前完成此工作时,我已经多次清理了项目。我只能假设 Eclipse 有一个不稳定的时刻 - 感谢 eclipse /)

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


【解决方案1】:

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

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

在您的样式名称下的 xml 属性中...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多