[mobilesafe] 10_自定义组合控件1-添加操作组合控件上的控件的方法

Android 4.0

自定义组合控件 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_layoutthis);
 //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_layoutthis);
        // 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);
    }
}