Android自定义属性
这里我自定义一个View来说明自定义属性的用法.
Part1.自定义一个View:
public class MyView extends View { public MyView(Context context) { super(context); } public MyView(Context context, AttributeSet attrs) { super(context, attrs); TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.MyView); Log.d("xyz","name:" + typedArray.getString(R.styleable.MyView_gylName) + "age:" + typedArray.getString(R.styleable.MyView_gylAge)); //MyView_gylName和MyView_gylAge是自定义属性,看官莫急 typedArray.recycle(); } }
这个View什么功能都没,取得自定义的两个属性的值并在日志打印出来.
在这里需要注意两点:
1.publicfinalTypedArrayobtainStyledAttributes(AttributeSetset,int[]attrs),这里第二个参数R.styleable.MyView,红字部分是自定义属性中declare-styleable标签的name属性的值.
2.可以用AttributeSet对象也就是attrs来取自定义属性的值,但是比较麻烦,推荐用TypedArray.
Part2.在values下建attr.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyView"> <attr name="gylName" format="string"/> <attr name="gylAge" format="integer"/> </declare-styleable> </resources>
declare-styleable是可以不要的,就是说可以直接在resource标签内写attr标签,但是,还是推荐写在declare-styleable里...
Part3.布局页
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ray="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <com.learn.gyl.xutilssample.MyView android:layout_width="match_parent" android:layout_height="match_parent" ray:gylAge="18" ray:gylName="gyl"/> </LinearLayout>
注意命名空间:xmlns:ray="http://schemas.android.com/apk/res-auto"
红字部分就是ray:gylAge="18"自定义控件里的部分.
运行结果:
xyz: name:gylage:18
相关推荐
STPace 2020-05-25
tthappyer 2020-01-17
yezi 2019-11-04
Imfondof 2015-06-15
JavaJspSsh 2019-09-08
wysjwh 2019-09-06
wangnantjobj 2019-07-01
cohciz 2019-07-01
攻城师 2019-06-29
gaohongijj 2016-08-01
Misswangdapao 2016-07-16
impress 2019-06-28
wcssdu 2019-06-28
notepaper 2016-04-07
wenhuadream 2015-03-26
瞌睡虫 2011-03-20
selt 2014-08-14