Android -- TypedArray

当我们自定义View的时候,在给View赋值一些长度宽度的时候,一般都是在layout布局文件中进行的。,比如android:layout_height="wrap_content",除此之外,我们也可以自己定义属性,这样在使用的时候我们就可以使用形如 myapp:myTextSize="20sp"的方式了。

values/attrs.xml

首先要创建变量,创建了个values/attrs.xml文件,或文件名任意,但是要在values目录下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyView">
        <attr name="textSize" format="dimension" />
    </declare-styleable>
</resources>

其中resource是跟标签,可以在里面定义若干个declare-styleable,<declare-styleable name="MyView">中name定义了变量的名称,下面可以再自定义多个属性,针对<attr name="textSize" format="dimension"/>来说,其属性的名称为"textSize",format指定了该属性类型为dimension,只能表示字体的大小。

  • format还可以指定其他的类型比如:
  • reference   表示引用,参考某一资源ID
  • string   表示字符串
  • color   表示颜色值
  • dimension   表示尺寸值
  • boolean   表示布尔值
  • integer   表示整型值
  • float   表示浮点值
  • fraction   表示百分数
  • enum   表示枚举值
  • flag   表示位运算

layout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res/com.eyu.attrtextdemo"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >  

    <us.yydcdut.MyView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        myapp:textSize="20sp"
        myapp:myColor="#324243"/>  

</LinearLayout>

可以看到多了xmlns:myapp="http://schemas.android.com/apk/res/com.eyu.attrtextdemo" ,以及在自定义View中 myapp:textSize="20sp" ,myapp:myColor="#324243"

obtainStyledAttributes

context通过调用obtainStyledAttributes方法来获取一个TypeArray,然后由该TypeArray来对属性进行设置

obtainStyledAttributes方法有三个,我们最常用的是有一个参数的obtainStyledAttributes(int[] attrs),其参数直接styleable中获得

TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyView);

调用结束后务必调用recycle()方法,否则这次的设定会对下次的使用造成影响

public class MyView extends View{
    public Paint paint;  

    public MyView(Context context, AttributeSet attrs) {
        super(context, attrs);
        paint = new Paint();  

        TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyView);
        int textColor = a.getColor(R.styleable.MyView_myColor, 003344);
        float textSize = a.getDimension(R.styleable.MyView_myTextSize, 33);
        paint.setTextSize(textSize);
        paint.setColor(textColor);
        a.recycle();
    }  

    public MyView(Context context) {
        super(context);
    }  

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        paint.setStyle(Style.FILL);
        canvas.drawText("aaaaaaa", 10, 50, paint);
    }  

}

我是天王盖地虎的分割线

时间: 2024-07-29 10:49:20

Android -- TypedArray的相关文章

Android TypedArray源码详解

尊重原创,转载请标明出处    http://blog.csdn.net/abcdef314159 在自定义控件的时候,如果我们想额外的添加一些属性,就会用到TypedArray这个类,那么这个类是怎么得到的,以及怎么使用的,这篇讲会详细讲解,下面是我以前自定义控件的一段代码 TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.myaccount_item_style); 我们看到TypedArray是

Android自定义属性:attr.xml 与 TypedArray

1.attr.xml <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyView"> <attr name="textColor" format="color" /> <attr name="textSize" format=&q

Android - 自定义控件和属性(attr和TypedArray)

http://blog.csdn.net/zjh_1110120/article/details/50976027 1.attr format 取值类型 以ShapeView 为例 <declare-styleable name="ShapeViewStyle"> <attr name="viewWidth" format="dimension|reference"/> <attr name="viewHe

android 自己定义控件属性(TypedArray以及attrs解释)

近期在捣鼓android 自己定义控件属性,学到了TypedArray以及attrs.在这当中看了一篇大神博客Android 深入理解Android中的自己定义属性.我就更加深入学习力一番.我就沿着这个学习,讲一下流程吧,兴许一篇还有应用. 1.attrs文件编写 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="titleText" for

Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用

本文转载自http://blog.csdn.net/jincf2011/article/details/6344678 今天我们的教程是根据前面一节扩展进行的,如果你没有看,请点击 Android高手进阶教程(三)查看第三课,这样跟容易方便你的理解! 在xml 文件里定义控件的属性,我们已经习惯了android:attrs="" ,那么我们能不能定义自己的属性能,比如:test:attrs="" 呢?答案是肯定的. 进入主题.大致以下步骤: 一. 在res/valu

Android-深入理解android自定义属性(AttributeSet,TypedArray)

属性 自定义属性,首先要定义出来属性,我们新建一个attrs.xml: <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="textSize0" format="dimension" /> <declare-styleable name="button1"> <attr name=

android 自定义控件属性(TypedArray以及attrs解释)

最近在捣鼓android 自定义控件属性,学到了TypedArray以及attrs.在这其中看了一篇大神博客Android 深入理解Android中的自定义属性.我就更加深入学习力一番.我就沿着这个学习,讲一下流程吧,后续一篇还有应用. 1.attrs文件编写 <?xml version="1.0" encoding="utf-8"?> <resources> <attr name="titleText" forma

Android自定义属性时TypedArray的使用方法

有时候android传统的页面布局不足以满足我们的需求,常常需要自己定义view,通常继承View,然后重写构造方法以及onDraw等函数,再具体实现自己定义的复杂view.我们知道在给控件赋属性时,通常使用的是android系统自带的属性,比如 android:layout_height="wrap_content",除此之外,我们亦可以自己定义属性,这样在使用的时候我们就可以使用形如 myapp:myTextSize="20sp"的方式了,步骤大致如下: 1 在

Android高手之路之Android中的自定义属性attr.xml、TypedArray的使用

一般我们都是使用android:xxx=""...这样的android的属性.但有时我们需要使用自定义的属性,尤其是自定义view的时候尤其需要. 一般需要以下几个步骤: 1.在res/values 文件下定义一个attrs.xml 文件: <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyView&q