Android——自定义属性TypedArray的使用

各位同学在开发学习中一定都会遇到自定义属性的问题,可能有的同学到现在还是模棱两可,昏昏沉沉的感觉,没关系,今天我会让你有个深刻的印象。别问我为什么这么自信,往下看就行,哈哈。


1、首先在values文件下,新建一个attrs.xml文件,其中文件内容如下:(注意这个文件名是可以任意命名的)

<?xml version="1.0" encoding="utf-8"?>   
<resources>   
    <declare-styleable name="button">   
        <attr name="textSize" format="dimension" />   
    </declare-styleable>   
</resources>
代码分析:

根标签必须是resources;定义属性变量的名字:declare-styleable name="button",这里定义名称为button;在这个名称里,可以有多个自定义属性。其中我们定义了个名为textSize的属性,格式是dimension,这个format指定了textSize属性的类型,只能用于定义字体大小。


2、在布局文件中使用自定义属性:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
	xmlns:myapp="http://schemas.android.com/apk/res/com.easymorse.textbutton" 
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
	android:background="@drawable/background_color"> 
        <com.easymorse.textbutton.TextButton 
                android:layout_width="fill_parent" 
		android:layout_height="fill_parent" 
                android:layout_weight="1" 
		android:text="电影" 
                android:gravity="center_vertical|center_horizontal" 
                android:background="@drawable/button" 
		android:focusable="true" 
                android:clickable="true" 
		myapp:textSize="20sp" />
</LinearLayout>
代码分析:

 
这里在根标签中增加了:xmlns:myapp=http://schemas.android.com/apk/res/com.easymorse.textbutton,声明了myapp这个名字空间,myapp可以是任意的名称,自己可以随便起名;http://schemas.android.com/apk/res/是固定的。再后面接的是应用的包名。 

在自定义按钮中:myapp:textSize,就是使用attr name="textSize"这个属性给变量赋值。

3、实际是如何使用自定义属性赋值的呢,接着看下面的代码:

public TextButton(final Context context, AttributeSet attrs) { 
	this(context, attrs, 0); 
        TypedArray typedArray=context.obtainStyledAttributes(attrs, R.styleable.button); 
        this.setTextSize(typedArray.getDimension(R.styleable.button_textSize, 15)); 
        typedArray.recycle();
}

代码分析:

其中,TypedArray实例是个属性的容器,通过context.obtainStyledAttributes()方法返回得到。AttributeSet是节点的属性集合,在本例中是<com.easymorse.textbutton.TextButton>节点中的属性集合。

这句话:typedArray.getDimension(R.styleable.button_textSize,15);将获取自定义textSize的值,如果没有,则使用默认的值,15。

最后别忘记调用:typedArray.recycle();作用是:Give back a previously retrieved StyledAttributes, for later re-use.通俗点就是为了保持以后使用该属性的一致性。


备注:

这里的自定义属性的format,可以有很多种:

  • reference
  • string
  • color
  • dimension
  • boolean
  • integer
  • float
  • fraction
  • enum
  • flag
怎么样有没有清晰明了呢???喜欢给个赞,哈哈。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值