我一直在为一些自定义布局组件使用自定义属性,没有问题。到目前为止,我只使用了简单的属性(字符串、整数等)。这些定义如下values/attrs.xml
:
<declare-styleable name="StaticListView">
<attr name="border_size" format="dimension" />
</declare-styleable>
在我的布局中:
<de.example.androidapp.StaticListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
namespace:border_size="1px"
/>
并像这样使用:
int borderSize = (int) a.getDimension(R.styleable.StaticListView_border_size, 0);
现在,我正在尝试将布局指定为自定义属性,并且无法R.styleable
使用上面使用的方法。
这是我定义属性的方式:
<declare-styleable name="StaticListView">
<attr name="emptyLayout" format="reference" />
</declare-styleable>
并使用它:
<de.example.androidapp.StaticListView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
namespace:emptyLayout="@layout/empty"
/>
这就是我想使用它的方式,但我总是得到默认值(-1
):
int emptyLayoutInt = attrs.getAttributeResourceValue(R.styleable.StaticListView_emptyLayout, -1);
但是,这有效:
int emptyLayoutInt = attrs.getAttributeResourceValue("http://schemas.android.com/apk/res/de.example.androidapp", "emptyLayout", -1);
我不喜欢硬编码 XML 命名空间。使用该R.styleable
属性可以很好地避免这种情况。
我做错了什么还是这是一个错误/预期的行为?