gpt4 book ai didi

android - getResourceId 在自定义控件中找不到ID

转载 作者:行者123 更新时间:2023-11-29 00:44:27 26 4
gpt4 key购买 nike

我正在尝试创建一个控件(一个在单击标题时展开和收缩的面板),并且我在网上找到了一些代码。在构造函数中,我有

TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyControl);
...
int headerId = array.getResourceId(R.styleable.MyControl_header, -1);

正在使用以下 XML 在布局文件中创建控件:

<MyControl
android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/drawer"
header="@+id/header" content="@+id/drawerContent"
android:layout_below="@id/contentContainer" android:background="#00FF00">
<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@id/header"
android:text="This is a header"/>

<TextView android:layout_height="wrap_content" android:layout_width="match_parent" android:id="@id/drawerContent"
android:text="@string/sample_text" />
</MyControl>

问题是,getResourceId() 返回 -1(即,它似乎无法找到设置为属性的资源)。

知道为什么吗?

编辑:忘记包含我的 attrs.xml 文件:

<resources>
<declare-styleable name="MyControl">
<attr name="collapsedHeight" format="dimension" />
<attr name="header" format="reference" />
<attr name="content" format="reference" />
<attr name="animationDuration" format="integer" />
</declare-styleable>

编辑 2:不知何故,我没想到要检查其他属性——我添加了几个其他属性。我也在调试器中检查了它们的值,看起来它们也是默认值。所以这不是 getResourceId 的问题,这与我获取属性的一般方式有关。我是 Android 新手,所以任何人都可以在我的属性处理代码中看到任何内容吗?

最佳答案

想通了。事实证明,属性必须在 XML 中命名空间;我把

<MyControl
android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/drawer"
header="@+id/header" content="@+id/drawerContent"...

但必须如此

<MyControl xmlns:myPackage="http://schemas.android.com/apk/res/com.my.package"
android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/drawer"
myPackage:header="@+id/header" myPackage:content="@+id/drawerContent"

在我添加这些之后,它发现值很好。

关于android - getResourceId 在自定义控件中找不到ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7247282/

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