一、定义一个XML布局文件
setting_item_view.xml
<?xml version=\"1.0\" encoding=\"utf-8\"?> <RelativeLayout xmlns:android=\"http://schemas.android.com/apk/res/android\" android:layout_width=\"fill_parent\" android:layout_height=\"60dip\" > <TextView android:id=\"@+id/tv_title\" android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\" android:layout_alignParentLeft=\"true\" android:layout_marginLeft=\"5dip\" android:layout_marginTop=\"5dip\" android:textColor=\"#000000\" android:textSize=\"20dip\" /> <TextView android:id=\"@+id/tv_desc\" android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\" android:layout_below=\"@+id/tv_title\" android:layout_marginLeft=\"5dip\" android:layout_marginBottom=\"5dip\" android:textColor=\"#99000000\" android:textSize=\"18dip\" /> <CheckBox android:clickable=\"false\" android:focusable=\"false\" android:id=\"@+id/cb_status\" android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\" android:layout_alignParentRight=\"true\" android:layout_centerVertical=\"true\" android:layout_marginRight=\"20dip\" /> <View android:layout_width=\"fill_parent\" android:layout_height=\"0.2dip\" android:layout_alignParentBottom=\"true\" android:layout_alignParentLeft=\"true\" android:layout_marginLeft=\"5dip\" android:layout_marginRight=\"5dip\" android:background=\"#000000\" /> </RelativeLayout>
二、在src/values/attrs.xml中定义属性
<?xml version=\"1.0\" encoding=\"utf-8\"?> <resources> <declare-styleable name=\"TextView\"> <attr name=\"title\" format=\"string\" /> <attr name=\"desc_on\" format=\"string\" /> <attr name=\"desc_off\" format=\"string\" /> </declare-styleable> </resources>
三、自定义一个view继承自你需要的布局
iniview(Context context)初始化自定义的布局文件
根据需求自定义一些API方法
public class SettingItemView extends RelativeLayout { private CheckBox cb_status; private TextView tv_title; private TextView tv_desc; private String title; private String desc_on; private String desc_off; public void iniview(Context context){ View.inflate(context, R.layout.setting_item_view, this); cb_status = (CheckBox)findViewById(R.id.cb_status); tv_title = (TextView)findViewById(R.id.tv_title); tv_desc = (TextView)findViewById(R.id.tv_desc); } public SettingItemView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); iniview(context); } public SettingItemView(Context context, AttributeSet attrs) { super(context, attrs); iniview(context); title = attrs.getAttributeValue(\"http://schemas.android.com/apk/res/com.victor.mobilesafe\",\"title\"); desc_on = attrs.getAttributeValue(\"http://schemas.android.com/apk/res/com.victor.mobilesafe\",\"desc_on\"); desc_off = attrs.getAttributeValue(\"http://schemas.android.com/apk/res/com.victor.mobilesafe\",\"desc_off\"); tv_title.setText(title); setDesc(desc_off); } public SettingItemView(Context context) { super(context); iniview(context); } public boolean isChecked(){ return cb_status.isChecked(); } public void setChecked(boolean checked){ if (checked) { setDesc(desc_on); }else{ setDesc(desc_off); } cb_status.setChecked(checked); } public void setDesc(String text){ tv_desc.setText(text); } }
四、在布局文件中使用该自定义组合控件
别忘记声明自定义命名空间
xmlns:victor=\"http://schemas.android.com/apk/res/com.victor.mobilesafe\"
<?xml version=\"1.0\" encoding=\"utf-8\"?> <LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\" xmlns:victor=\"http://schemas.android.com/apk/res/com.victor.mobilesafe\" android:layout_width=\"match_parent\" android:layout_height=\"match_parent\" android:orientation=\"vertical\" > <com.victor.mobilesafe.ui.SettingItemView android:id=\"@+id/siv_update\" android:layout_width=\"wrap_content\" android:layout_height=\"wrap_content\" victor:desc_off=\"自动更新关闭\" victor:desc_on=\"自动更新开启\" victor:title=\"设置自动更新\" > </com.victor.mobilesafe.ui.SettingItemView> </LinearLayout>
总结:
1.自定义一个View 一般来说,继承相对布局,或者线性布局 ViewGroup;
2.实现父类的构造方法。一般来说,需要在构造方法里初始化自定义的布局文件;
3.根据一些需要或者需求,定义一些API方法;
4.根据需要,自定义控件的属性,可以参照TextView属性;
5.自定义命名空间,例如:
xmlns:victor=\"http://schemas.android.com/apk/res/<包名>\" xmlns:victor=\"http://schemas.android.com/apk/res/com.victor.mobilesafe\"
6.自定义我们的属性,在Res/values/attrs.xml
7.使用我们自定义的属性
例如:
itheima:title=\"设置自动更新\" itheima:desc_on=\"设置自动更新已经开启\" itheima:desc_off=\"设置自动更新已经关闭\"
8.在我们自定义控件的带有两个参数的构造方法里AttributeSet attrs 取出我们的属性值,关联自定义布局文件对应的控件。
本文地址:https://www.stayed.cn/item/20842
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我