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>
新闻热点
疑难解答