Android自定义控件——自定义属性
程序员文章站
2022-06-08 23:42:02
...
自定义属性是什么?
自定义属性指用户定义的关于控件的属性,可在xml布局文件中直接应用并获取
实现
在res/values下新建attrs.xml,如下在一个declare-styleable标签下定义了2个arr标签
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="My_style">
<attr name="attr1" format="boolean" />
<attr name="attr2" format="enum">
<enum name="one" value="1" />
<enum name="two" value="2" />
</attr>
</declare-styleable>
</resources>
在自定义控件MyView中使用自定义属性my:attr1和my:attr2,使用前应该申明命名空间xmlns:my="http://schemas.android.com/apk/res-auto"
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:my="http://schemas.android.com/apk/res-auto"
tools:context=".MainActivity">
<com.example.app2.MyView
android:layout_width="match_parent"
my:attr1="false"
my:attr2="one"
android:layout_height="wrap_content"/>
</LinearLayout>
在自定义控件中获取属性的值,在构造方法中通过TypedArray获取
public class MyView extends LinearLayout {
public MyView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.My_style);
boolean attr1 = ta.getBoolean(R.styleable.My_style_attr1, true);
int attr2 = ta.getInteger(R.styleable.My_style_attr2, 0);
ta.recycle();
Log.d("test", "attr1=" + attr1);
Log.d("test", "attr1=" + attr2);
}
}
上一篇: 酱茄子的家常做法原来是这样的
下一篇: Android自定义控件的属性