zoukankan      html  css  js  c++  java
  • android使用自己定义属性AttributeSet

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

    首先要创建变量,创建了个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
  • 相关阅读:
    无线放大器扩展后,无线网络上不了网的问题解决
    可变现净值
    三大PLM厂商
    CF #589 (Div. 2) D. Complete Tripartite 构造
    CF #589 (Div. 2)C. Primes and Multiplication 快速幂+质因数
    BZOJ 4025 二分图 LCT维护最大生成树
    BZOJ3791 作业 动态规划
    luogu 2943 [USACO09MAR]清理Cleaning Up 动态规划
    luogu 4909 [Usaco2006 Mar]Ski Lift 缆车支柱 动态规划
    SP1716 GSS3(线段树+矩阵乘法)
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4281092.html
Copyright © 2011-2022 走看看