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

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

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

现在,我想为我的小部件做同样的事情,但使用不同的命名空间。 然而,只要我用别的东西replaceandroid:命名空间,我得到这个错误:

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

无法find属性? 为什么它寻找我即将申报的属性? 这个文件的目的不是能够命名你自己的自定义属性吗?

有趣的是,如果你不提供一个自定义的命名空间,而只是一个属性名,它就可以工作。

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

我有一个类似的问题,导致错误消息找不到包中的属性的资源标识符

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

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

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

 <gallery.widget.package.Gallery1 myns:myCustomAttr="xxx" /> 

如果有人仍然感兴趣,我有同样的问题,并通过添加一个“格式”属性解决它(它似乎不需要“string”作为默认值):

 <attr name="android:galleryItemBackground" format="integer"/> 

我发现这篇文章有助于类似的情况。

“引用我们的新属性实际上是一个两步的过程,首先我们声明一个新的名称空间,接下来我们在XML用法中指定新属性的值。

创build一个XML文件,并粘贴下面的代码,并放在res-> 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(); 

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