背景
之前讲了Android自定义View实现圆形效果,但是很简单,并没有实现一些自定义的属性,今天就大致实现以下自定义属性。
自定义属性
我们在布局文件里面可以写一些以android开头的属性,这些都是系统的自带属性,我们也可以定义一些自己的。
- 在valuse目录下面创建一些自定义属性的XML,比如attrs.xml,也可以是arrts_circle.xml,只要以arrts开头就可以,没有什么特殊要求,比如:
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="CircleView"> <attr name="circle_color" format="color" /> </declare-styleable> </resources>
上面定义了一个自定义的属性集"CircleView",在这个集合里面也可以有多种自定义属性,我们只是制定了颜色,其中format可以有多种格式,color表示的是颜色,其他的reference表示资源Id,dimension表示尺寸大小,string,integer,boolean表示的是基本数据类型,等等。 - 在自定义View的构造方法里面解析自定义属性的值并作相应的处理,在我们之前的代码里面只要修改构造方法就可以:
public CircleView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArrayarray = context.obtainStyledAttributes(attrs,R.styleable.CircleView); mColor = array.getColor(R.styleable.CircleView_circle_color,Color.GREEN); array.recycle(); init(); }
- 我们只要在布局里面设置颜色值就可以了
<?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" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent"> <com.aotuman.circleview.view.CircleView android:padding="10dp" android:layout_margin="10dp" android:layout_width="wrap_content" android:layout_height="200dp" app:circle_color="@color/colorAccent" android:background="@android:color/black"/> </RelativeLayout>
大家需要注意的是,我不只是加了一行修改颜色的代码,除了
app:circle_color="@color/colorAccent"
之外还有下面这一行也是必须的:
xmlns:app="http://schemas.android.com/apk/res-auto"
结尾
好了,到这里为止,我们简单的自定义属性也已经完成了,我们来看一下自定义颜色的效果图