自定义控件之自定义xmlns

来源:互联网 发布:美业邦软件的弊端 编辑:程序博客网 时间:2024/05/16 08:41

首先xmlns是什么呢,它就是一个控件属性的命名空间,我们经常使用的命名空间有Android和app等,那么我们自己如何定义一个可用的命名空间呢?

1、首先我们在values文件夹下创建一个attrs.xml文件,创建完毕之后里面有一个自动生成的resources标签,我们要做的就是在这个resources标签下定义几个属性,代码是这样:

<resources><declare-styleable name="MyTextView">    <attr name="mytitle" format="string"/>    <attr name="mytitleTextSize" format="dimension"/>    <attr name="mytitleTextColor" format="color"/>    <attr name="myBackground" format="reference|color"/></declare-styleable></resources>

这个declare-styleable标签用来声明一组自定义属性,name属性代表这一组标签的名字,attr标签也就代表一个自定义属性,name属性代表这个自定义属性的名字,format属性代表这个自定义属性可以接受的类型。
format属性中我说明一下reference,这个代表的类型为引用类型,不仅可以是颜色,也可以是一张图片,也可以是其他资源。
这样我们就定义好了一组属性。

那么在自定义控件里如何使用这些属性获取属性值呢?

2、接下来我们需要重写自定义控件的构造方法,这里注意,不能重写只有一个参数的那个构造方法
代码是这样的:

public MyTextView(Context context, @Nullable AttributeSet attrs) {    super(context, attrs);    TypedArray ta=context.obtainStyledAttributes(attrs,R.styleable.MyTextView);//获取自定义属性组    title=ta.getString(R.styleable.MyTextView_mytitle);//获取mytitle属性值    ta.recycle();//回收ta}

这里首先获取自定义属性组,然后获取自定义属性值,这样,我们就能获得此控件的任何一个属性的属性值。最后,一定要回收ta
在这个代码中,获得的title值就能根据自己控件的需要进行操作了。

3、最后,我们需要定义一个xmlns命名空间,XML 命名空间定义语法为 xmlns:namespace-prefix = “namespaceURI”,一共分为三个部分:

xmlns:声明命名空间的保留字;
namespace-prefix:命名空间名;
namespaceURI:命名空间的唯一标识符,就是一个URI引用。

先看一下我定义的命名空间吧:

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

经过多次试验,url直接使用我这个url就可以,其他的博客可能说在后面加上包名什么的,都不管用!
所以我们只需要改一下我这个代码的test(命名空间名)就将xmlns定义好了。
随后,我们在自定义控件中就能使用这个命名空间下的属性了。
比如:

<com.demo.mql.mydemo.MyTextView    android:background="@color/colorPrimary"    test:mytitle="@string/app_name"    android:layout_width="wrap_content"    android:layout_height="wrap_content"/>
原创粉丝点击