自定义组合控件 1
添加操作组合控件上的控件的方法 |
注意1:checkbox的大小内部固定,如果手动更改过小,那么会显示不全,可能是两条线 注意2:自定义组合控件中,设置点击事件,由于checkbox具有可聚焦的特点,当点击时,会获取焦点,从而该点击事件无效,所以要将checkbox设置为不可获取焦点。 android:focusable="false"
android:clickable="false"
|
自定义一个组合控件如上效果:SettingView.java 1、写一个类SettingView.java继承 RelativeLayout 定义一个初始化的方法: public void initViewFromXml(Context context) { View.inflate(context, R.layout.setting_view_layout, this);
//inflate一个xml文件转换成View对象,this表示挂载在什么下面(也就是认谁当爹)
} 2、在覆盖的构造器中调用该初始化方法,将该组合控件转成一个View对象 public SettingView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initViewFromXml(context);
}
public SettingView(Context context, AttributeSet attrs) {
super(context, attrs);
initViewFromXml(context);
}
public SettingView(Context context) {
super(context);
initViewFromXml(context);
}
} 3、布局中就可以使用该组件了,但必须加上全包名,因为是自定义的组件 <cn.zengfansheng.mobilesafe.ui.SettingView
android:id="@+id/sv1_setting"
android:layout_width="match_parent"
android:layout_height="65dip"
android:background="@drawable/setting_item_states_selector" > //设置自定义的触摸状态
</cn.zengfansheng.mobilesafe.ui.SettingView>
4、在自定义组合控件中添加对相应的控件的操作的方法 package cn.zengfansheng.mobilesafe.ui;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.CheckBox;
import android.widget.RelativeLayout;
import android.widget.TextView;
import cn.zengfansheng.mobilesafe.R;
/**
* 2、自定义的组合控件,设置中心的条目显示
* 把xml布局文件转化成view对象. 挂载在当前settingView控件上 this
* @author hacket
*/
public class SettingView extends RelativeLayout {
private TextView tv_setting_title;// 标题
private TextView tv_setting_desc;// 描述
private CheckBox cb_setting;// checkbox
public SettingView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
initViewFromXml(context);
}
public SettingView(Context context, AttributeSet attrs) {
super(context, attrs);
initViewFromXml(context);
}
public SettingView(Context context) {
super(context);
initViewFromXml(context);
}
/**
* 1、初始化自定义布局文件,将xml布局文件转换成view对象
*
* @param context
*/
public void initViewFromXml(Context context) {
// 1、 inflate一个xml文件转换成View对象,this表示挂载在什么下面(也就是认谁当爹)
View view = View.inflate(context, R.layout.setting_view_layout, this);
// 2、初始化组件
tv_setting_title = (TextView) view.findViewById(R.id.tv_setting_title);
tv_setting_desc = (TextView) view.findViewById(R.id.tv_setting_description);
cb_setting = (CheckBox) view.findViewById(R.id.cb_setting);
}
/**
* 2、获取标题的文本
* @return 获取到的标题
*/
public String getTitle() {
return tv_setting_title.getText().toString().trim();
}
/**
* 3、获取到的描述信息
* @return 获取到的描述信息
*/
public String getDesc() {
return tv_setting_desc.getText().toString().trim();
}
/**
* 4、设置标题信息
* @param title 要设置的标题
*/
public void setTitle(String title) {
tv_setting_title.setText(title);
}
/**
* 5、设置描述信息
* @param desc 要设置的描述信息
*/
public void setDesc(String desc){
tv_setting_desc.setText(desc);
}
/**
* 6、checkbox是否被选中
*/
public boolean isChecked() {
return cb_setting.isChecked();
}
/**
* 7、设置checkbox的选中状态
* @param isChecked
*/
public void setChecked(boolean isChecked){
cb_setting.setChecked(isChecked);
}
} |