一、定义一个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
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我