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

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

   

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

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

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

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

Solutions Collecting From Web of "Android自定义小部件样式:如何将它们放入命名空间?"

我有一个类似的问题导致错误消息没有为包中的属性find资源标识符

对我来说,解决方案是在使用自定义属性时声明命名空间。

在您使用自定义属性的xml文件中指定:

 xmlns:myns="http://schemas.android.com/apk/res-auto" 

  

如果有人仍然感兴趣,我有同样的问题,并通过添加’格式’属性解决它(它似乎不以’字符串’作为默认值):

  

我发现这篇文章在类似情况下有所帮助。

“引用我们的新属性实际上是一个两步过程。首先我们声明了一个新的命名空间,然后我们在XML用法中指定了新属性的值。”

创建一个xml文件并粘贴下面的代码并放入res-> values文件夹

    

然后复制下面的代码

 TypedArray typedArray=this.obtainStyledAttributes(R.styleable.Gallery1); int back=typedArray.getResourceId(R.styleable.Gallery1_android_galleryItemBackground, 0); typedArray.recycle(); 

并在你的小部件背景中设置我的意思是imageView.setBackgroundResource(back);