首页 > 系统 > Android > 正文

Android开发之自定义属性

2019-11-07 23:35:49
字体:
来源:转载
供稿:网友
public class MyAttributeView extends View {    PRivate int myAge;    private String myName;    private Bitmap myBg;    public MyAttributeView(Context context, AttributeSet attrs) {        super(context, attrs);        //获取属性三种方式        //1.用命名空间取获取        String age = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","my_age");        String name = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","my_name");        String bg = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto","my_bg");//        System.out.println("age=="+age+",name=="+name+",bg==="+bg);        //2.遍历属性集合        for(int i=0;i<attrs.getAttributeCount();i++){            System.out.println(attrs.getAttributeName(i)+"====="+attrs.getAttributeValue(i));        }        //3.使用系统工具,获取属性        TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.MyAttributeView);       for(int i=0;i<typedArray.getIndexCount();i++){          int index =  typedArray.getIndex(i);           switch (index){               case R.styleable.MyAttributeView_my_age:                   myAge = typedArray.getInt(index,0);                   break;               case R.styleable.MyAttributeView_my_name:                   myName = typedArray.getString(index);                   break;               case R.styleable.MyAttributeView_my_bg:                   Drawable drawable = typedArray.getDrawable(index);                   BitmapDrawable drawable1 = (BitmapDrawable) drawable;                   myBg = drawable1.getBitmap();                   break;           }       }        // 记得回收        typedArray.recycle();    }    @Override    protected void onDraw(Canvas canvas) {        super.onDraw(canvas);        Paint paint = new Paint();        canvas.drawText(myName+"---"+myAge,50,50,paint);        canvas.drawBitmap(myBg,50,50,paint);    }}

value-attrs文件

<?xml version="1.0" encoding="utf-8"?><resources>    <!--定义名字叫MyAttributeView属性集合-->    <declare-styleable name="MyAttributeView">        <!--定义一个名字叫my_name并且类型是string的属性-->        <attr name="my_name" format="string"/>        <!--定义一个名字叫my_age并且类型是integer的属性-->        <attr name="my_age" format="integer"/>        <!--定义一个名字叫my_bg并且类型是reference|color的属性-->        <attr name="my_bg" format="reference|color"/>    </declare-styleable></resources>

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context="com.atguigu.autoattribute.MainActivity">    <com.atguigu.autoattribute.MyAttributeView        android:layout_width="match_parent"        android:layout_height="match_parent"        app:my_age="100"        app:my_bg="@drawable/jtx"        app:my_name="android0220"        /></RelativeLayout>


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表