自定义控件:自定义属性

在做自定义控件时,我们想给控件自定义某些属性时,可以通过以下方法解决。

1.在values文件夹下,新建attr.xml文件

1 <?xml version="1.0" encoding="utf-8"?>
2 <resources>
3     <declare-styleable name="MyFirstCustomView">
4         <attr name="customColor" format="color"></attr>
5         <attr name="customTextSize" format="dimension"></attr>
6     </declare-styleable>
7 </resources>
declare-styleable 定义了一个属性节点,attr代表自定义属性名称,format代表属性值类型

2.创建自定义控件MyFirstCustomerView
 1 public class MyFirstCustomView extends TextView {
 2 
 3     public MyFirstCustomView(Context context) {
 4         this(context,null);
 5     }
 6 
 7     public MyFirstCustomView(Context context, AttributeSet attrs) {
 8         this(context,attrs,0);
 9     }
10 
11     public MyFirstCustomView(Context context, AttributeSet attrs, int defStyle) {
12         super(context, attrs, defStyle);
13         TypedArray _typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyFirstCustomView,0,0);
14         int color = _typedArray.getColor(R.styleable.MyFirstCustomView_customColor,0);
15         float size = _typedArray.getDimension(R.styleable.MyFirstCustomView_customTextSize,24);
16         setTextColor(color);
17         setTextSize(size);
18         _typedArray.recycle();
19     }
20 
21 }
 TypedArray 数组容器,通过它获取自定义的属性值:
_typedArray.getColor(R.styleable.MyFirstCustomView_customColor,0);//获取自定义的值customColor
_typedArray.getColor(R.styleable.MyFirstCustomView_customTextSize,24);//获取自定义的值customTextSize,默认24
_typedArray用完后需要recycle()回收。

3.在layout布局文件中引用控件
 1 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     xmlns:app="http://schemas.android.com/apk/res-auto"
 6     tools:context="com.zc.myapp.fragment.HomeFragment">
 7 
 8     <com.zc.baselib.view.MyFirstCustomView
 9         android:layout_width="match_parent"
10         android:layout_height="wrap_content"
11         android:layout_marginTop="@dimen/margin_msg"
12         android:text="自定义控件(首页)"
13         app:customColor="@color/color_theme"
14         app:customTextSize="@dimen/middle_txt_size"/>
15 
16 </FrameLayout>

 

posted @ 2018-05-10 16:05  随易来了  阅读(125)  评论(0编辑  收藏  举报