如何在Android的xml中创建自定义属性?
问题的出现原因:在Android中,我们可以使用XML文件来声明自定义属性,但是在使用自定义属性时,需要找到相应的属性值。本例中,作者想要在XML文件中声明一个自定义属性,并在代码中获取该属性的值。
解决方法:作者在XML文件中声明了一个自定义的属性foo,并将其值设置为"bar"。然后,在代码中的CustomView类的构造函数中,通过获取属性集合中的属性值来获取foo属性的值。最后,通过Log.d方法将获取到的属性值输出到日志中。
以下是整理后的
在Android中,我们可以使用XML文件来声明自定义属性,并在代码中获取这些属性的值。在本例中,作者想要在XML文件中声明一个名为foo的自定义属性,并在代码中获取该属性的值。
首先,作者在XML文件中声明了一个PreferenceScreen,并在其中使用了一个自定义的View组件CustomView,并给该组件设置了属性foo的值为"bar"。具体代码如下:
然后,在CustomView类的构造函数中,作者通过获取属性集合中的属性值来获取foo属性的值。具体代码如下:
public CustomView(Context context, AttributeSet attrs) { String bar = attrs.getAttributeValue(null, "foo"); Log.d("CustomView", "foo=" + bar); }
通过以上代码,我们可以在CustomView类的构造函数中获取到属性foo的值,并将其输出到日志中。
通过以上的解决方法,我们可以在XML文件中声明自定义属性,并在代码中获取这些属性的值。这为我们在开发Android应用时,灵活使用自定义属性提供了便利。
如何在Android的xml上创建自定义属性?
在使用自定义属性的布局文件中,必须使用命名空间URI "schemas.android.com/apk/res-auto",而不是包含app包名的URI。这个URI在构建时会被替换为特定的应用程序URI。也就是说,"xmlns:app..." 应该替换为:xmlns:custom="schemas.android.com/apk/res-auto",并且在使用时,"app:custom_property..." 替换为:"custom:custom_property..."。仅在ADT版本17+中才支持此功能。
要监听这些xml属性在编辑模式(设计时间)下的更改,需要重写视图的构造函数。因为布局文件加载时会调用此函数。没有重写的话,将无法获取xml文件中设置的值。
在布局文件中使用自定义组件时,需要添加命名空间的链接。例如:xmlns:custom="http://schemas.android.com/apk/res-auto"
,除了 xmlns:android="http://schemas.android.com/apk/res/android"
。然后就可以在自定义小部件中使用库中的属性,如在自定义小部件中使用 custom:pstsUnderlineColor="#ffffff"
。非常感谢!
是否需要重写构造函数,还是只针对键盘示例?无论何时都需要重写构造函数,因为它接收布局加载时的属性集。如果没有重写,将无法获取在xml文件中设置的值。