• 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);  
        }  
          
    }

    我是天王盖地虎的分割线

  • 相关阅读:
    团队项目——站立会议DAY14
    团队项目——站立会议DAY13
    团队项目——站立会议DAY12
    团队项目——站立会议 DAY11
    团队项目——站立会议DAY10
    团队项目——站立会议DAY9
    团队项目——站立会议 DAY8
    团队项目——站立会议DAY7
    团队项目——站立会议DAY6
    作业五:团队项目——项目启动及需求分析
  • 原文地址:https://www.cnblogs.com/yydcdut/p/4251572.html
Copyright © 2020-2023  润新知