Android自定义小部件样式:如何将它们放入命名空间?

时间:2009-09-21 07:46:06

标签: android widget

在ApiDemos中,有一个名为Gallery1的视图示例,它在attrs.xml中声明了一个自定义样式,如下所示:

<declare-styleable name="Gallery1">
    <attr name="android:galleryItemBackground" />
</declare-styleable>

现在,我想为我的小部件做同样的事情,但使用不同的命名空间。但是,只要我用其他东西替换android:名称空间,我就会收到此错误:

  

错误:在Gallery1中,无法找到属性myns:galleryItemBackground

无法找到属性?为什么它要查找我要声明的属性?这个文件的重点不是能够命名自己的自定义属性吗?

有趣的是,如果您不提供自定义命名空间,而只是提供属性名称,则它可以正常工作。

4 个答案:

答案 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);