当前位置:首页 > 开发 > 移动开发 > 正文

自定义控件(attrs定义属性的使用)

发表于: 2012-12-04   作者:矮蛋蛋   来源:转载   浏览次数:
摘要: 这里为了演示使用自定义变量,字体大小改用自定义的属性。 首先要创建变量,创建了个values/attrs.xml文件,文件名任意,但是要在values目录下: <?xml version="1.0" encoding="utf-8"?>   <resources>    
这里为了演示使用自定义变量,字体大小改用自定义的属性。

首先要创建变量,创建了个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/

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

在下面自定义按钮中的: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

自定义控件(attrs定义属性的使用)

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
最近在摸索自定义控件,查找到一些自定义属性的一些资料,解决转载记载下来:看了此详解才方便理解
做Android布局是件很享受的事,这得益于他良好的xml方式。使用xml可以快速有效的为软件定义界面。可
自定义属性,属性对应着attrs.xml文件 自定义控件,控件对应着MyView.java文件 <RelativeLayout
Android自定义属性,attr format取值类型 1. reference:参考某一资源ID。 (1)属性定义: <dec
在xml 文件里定义控件的属性,我们已经习惯了android:attrs="" ,那么我们能不能定义自己的属性能,
在xml 文件里定义控件的属性,我们已经习惯了android:attrs="" ,那么我们能不能定义自己的属性能,
一直有个问题就是,Android中是如何通过布局文件,就能实现控件效果的不同呢?比如在布局文件中,我
最近在模仿今日头条,发现它的很多属性都是通过自定义控件并设定相关的配置属性进行配置,于是便查
转自:http://jiayanjujyj.iteye.com/blog/1392541 最近在做软件从2.3到4.0的改变的一些工作,其中
Athrun框架自定义控件的使用 无论Android还是iOS都支持自定义控件,而原始Athrun框架只支持系统控件
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号