android使用自己定义属性AttributeSet

  • Post author:
  • Post category:其他


这里为了演示使用自己定义变量,字体大小改用自己定义的属性。

首先要创建变量,创建了个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。在这个名称里,能够有多个自己定义属性。定义了个名为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/


是固定的。再后面接的是应用的包名。

在以下自己定义button中的:myapp:textSize,就是使用<attr name=”textSize”这个变量了,给变量赋值。

还须要一个过程,就是在程序中获取到这个赋值:

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