在ApiDemos中,有一个名为Gallery1的视图示例,它在attrs.xml中声明了一个自定义样式,如下所示:
<declare-styleable name="Gallery1">
<attr name="android:galleryItemBackground" />
</declare-styleable>
现在,我想为我的小部件做同样的事情,但使用不同的命名空间。但是,只要我用其他东西替换android:名称空间,我就会收到此错误:
错误:在Gallery1中,无法找到属性myns:galleryItemBackground
无法找到属性?为什么它要查找我要声明的属性?这个文件的重点不是能够命名自己的自定义属性吗?
有趣的是,如果您不提供自定义命名空间,而只是提供属性名称,则它可以正常工作。
答案 0 :(得分:21)
我遇到了类似的问题导致错误消息找不到包中属性的资源标识符
我的解决方案是在使用自定义属性时声明命名空间。
在您使用自定义属性的xml文件中指定:
xmlns:myns="http://schemas.android.com/apk/res-auto"
...
<gallery.widget.package.Gallery1
myns:myCustomAttr="xxx"
/>
答案 1 :(得分:7)
如果有人仍然感兴趣,我遇到了同样的问题并通过添加'format'属性来解决它(似乎它不会将'string'作为默认值):
<attr name="android:galleryItemBackground" format="integer"/>
答案 2 :(得分:1)
我发现this文章在类似情况下有所帮助。
“引用我们的新属性实际上是一个两步过程。首先我们声明了一个新的命名空间,然后我们在XML用法中指定了新属性的值。”
< / p>
答案 3 :(得分:1)
创建一个xml文件并粘贴下面的代码并放入res-&gt; values文件夹
<declare-styleable name="Gallery1">
<attr name="android:galleryItemBackground" />
</declare-styleable>
然后复制下面的代码
TypedArray typedArray=this.obtainStyledAttributes(R.styleable.Gallery1);
int back=typedArray.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0);
typedArray.recycle();
并在ur widget背景中设置我的意思是imageView.setBackgroundResource(back);