gpt4 book ai didi

android - 为什么在使用 getAttributeResourceValue 时需要指定 XML 命名空间?

转载 作者:行者123 更新时间:2023-11-29 22:02:39 25 4
gpt4 key购买 nike

我一直在毫无问题地为一些自定义布局组件使用自定义属性。到目前为止,我只使用了简单的属性(字符串、整数等)。这些在 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 属性可以很好地避免这种情况。

我是不是做错了什么或者这是一个错误/预期的行为?

最佳答案

而不是使用行:

int emptyLayoutInt = attrs.getAttributeResourceValue(R.styleable.StaticListView_emptyLayout, -1);

使用这个-

TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.MyLayout);
int layoutId = a.getResourceId(R.styleable.MyLayout_text,-1);

返回 -1,因为该值在 attr 集中不可用。

关于android - 为什么在使用 getAttributeResourceValue 时需要指定 XML 命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11576349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com