演示使用自定义变量,字体大小改用自定义的属性。
一:
首先要创建变量,创建了个values/attrs.xml文件,文件名任意,但是要在values目录下:
<?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。在button这个名称里,可以有多个自定义属性。定义了个名为textSize的属性,格式是dimension,这个format指定了textSize属性的类型,只能用于定义字体大小。
二:
在布局文件中通过自定义属性赋值
<?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">
<LinearLayout android:layout_width="fill_parent"
android:layout_height="10dip" />
<LinearLayout android:layout_width="fill_parent"
android:layout_height="40dip">
<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" />
详细注解:
第三行:
xmlns:myapp=http://schemas.android.com/apk/res/com.easymorse.textbutton
在根标签中添加了这一行是为了声明了myapp这个名字空间,myapp是任意的名称,自己可以随便起名
后面的内容是:
http://schemas.android.com/apk/res/ + 应用的包名
三:
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();
详细注解:
第三行:R.styleable.button 就是刚才定义的<declare-styleable name="button">
myapp:textSize,就是使用<attr name="textSize"这个变量了,给变量赋值。
第四行:将获取自定义textSize的值,如果没有,则使用默认的值,15。
最后:别忘记调用:typedArray.recycle();
作用为:Give back a previously retrieved StyledAttributes, for later re-use.
百度粗暴翻译为:把以前检索styledattributes,供以后重复使用。
重要!!:
其中,TypedArray实例是个属性的容器,context.obtainStyledAttributes()方法返回得到。AttributeSet是节点的属性集合,在本例中是<com.easymorse.textbutton.TextButton节点中的属性集合。
这里的自定义属性的format,可以有很多种: (字体大小啊 颜色啊等等自定义
- reference
- string
- color
- dimension
- boolean
- integer
- float
- fraction
- enum
- flag
共勉!androidUI