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

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

   

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

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

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

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

  • 以编程方式显示/隐藏Flutter上的小部件
  • 动态启用或禁用窗口小部件不起作用
  • 号码选择器对话框
  • 在Android Widget上单击处理多个按钮
  • 环形进度条上的Android圆形边缘
  • 按下小部件ListView项时的Android启动活动
  • 单击小部件启动活动
  • Gallery ImageAdapter convertView始终为null
  • 我有一个类似的问题导致错误消息没有为包中的属性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);