<?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>
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); } }
自定义组件属性定义获取
最新推荐文章于 2021-09-10 11:02:21 发布