Android自定义属性点出来记录(命名空间没有写对)

在我们自定义View的时候 现在的 属性 (width height) 不能满足 控件需要的时候 我们需要自定义属性:
首先们 新建一个View继承自view

package com.example.automaticattrs.view;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;

public class PercentView extends View {

    public PercentView(Context context, AttributeSet attrs) {
        super(context, attrs);


    }

}

然后我们在项目目录 values 文件夹下新建一个attrs.xml
这里写图片描述
如下:
这里写图片描述
这里的 结点 还有下面的 name 和format 都不会的提示 全靠 我们手动敲出来 attrs是定义属性名和格式的地方,需要用包围所有属性。其中name为该属性集的名字,主要用途是标识该属性集。 这里的name 是我自定义View的名字,这个name 可以随便写 但为了标识 我就用了 自定义view的名字。
这里的format 可以用到的类型为:string , integer , dimension , reference , color , enum.
那么如何定义一个枚举呢:

<attr name="testEnum"> 
    <enum name="fill_parent" value="-1"/> 
    <enum name="wrap_content" value="-2"/> 
</attr>

如果该属性可同时传两种不同的属性,则可以用“|”分割开即可。
在布布局中如何使用?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:huwen="http://schemas.android.com/apk/res/com.example.automaticattrs"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
  >
<com.example.automaticattrs.view.PercentView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    huwen:text="hao"
    huwen:testAttr="20"
    ></com.example.automaticattrs.view.PercentView>

</RelativeLayout>

这个命名空间一个要写上,不然我们的自己定义属性是无法使用的。xmlns:huwen="http://schemas.android.com/apk/res/com.example.automaticattrs"
这个命名空间 可以直接 copy: xmlns:android="http://schemas.android.com/apk/res/android 把android去掉 在清单文件里找到我们包名 把Android 改成我们的包名就可以了:
这里写图片描述

这个xmlns:huwen 的 huwen 是可以随便写的 但 如果这里写成 xmlns:xxx 则 我们使用属性的时候就要写成 xxx:text="hao"
xxx:testAttr="20"

那我们如何在代码中获取这些值呢?

public class PercentView extends View {

    public PercentView(Context context, AttributeSet attrs) {
        super(context, attrs);

        TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.PercentView);
        String string = a.getString(R.styleable.PercentView_text);
        int integer = a.getInteger(R.styleable.PercentView_testAttr, 0);
        Log.d("tag", string+":::::"+integer);
    }

}

项目跑起来后:log出:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值