Android实例-手机安全卫士(八)-自定义组合控件事件相应和改变状态
一、目标。
实现自定义控件点击事件响应和内容状态变化。
1、点击自定义控件内的任何区域时,CheckBox状态均会变化。
2、自定义控件里面的内容会根据CheckBox的状态进行改变。
效果图1:
二、代码实现。
1、在自定义控件类(SettingItemView)中增加方法。
①.在自定义控件类对应的xml文件(SettingItemView)中设置各个控件的id,便于自定义控件类(SettingItemView)对它们进行操作。同时,设置CheckBox的clickable属性为false,这是为了让CheckBox失去可点击的属性。因为,CheckBox的点击事件相应比其他控件都高,所以当设置完成自定义控件点击事件后,点击自定义控件除CheckBox外的其他区域时,CheckBox状态和TextView内容都会改变,但特意点击CheckBox区域时,CheckBox状态会改变而TextView中的内容不会改变。
②.在自定义控件类(SettingItemView)的iniView方法中,通过this.findViewById(int id)方法找到自定义控件类对应的xml文件(SettingItemView)中的相应的三个控件。因为xml布局文件(SettingItemView)已经通过inflate方法装载至SettingItemView类中,所以可以采用this.find...方法。
代码:
1 setting_update_checkbox = (CheckBox) this.findViewById(R.id.setting_update_checkbox); 2 setting_update_title = (TextView) this.findViewById(R.id.setting_update_title); 3 setting_update_content = (TextView) this.findViewById(R.id.setting_update_content);
③.在自定义控件类(SettingItemView)中新建boolean类型的方法(取名isChecked),用于判断自定义控件中的CheckBox是否被选中。该方法较简单,只需返回CheckBox的isChecked()方法即可。
代码如下:
1 public boolean isChecked(){ 2 return setting_update_checkbox.isChecked(); 3 }
④.在自定义控件类(SettingItemView)中新建无返回值(void)的方法(取名setChecked(boolean checked)),参数为boolean checked,用于设置组合控件中CheckBox的状态。
代码如下:
1 public void setChecked(boolean checked){ 2 setting_update_checkbox.setChecked(checked); 3 }
⑤.在自定义控件类(SettingItemView)中新建无返回值(void)的方法(取名setContent(String text)),用于改变组合控件中相应文本控件的内容,传入String类型的参数作为新文本内容。
代码:
1 public void setContent(String text){ 2 setting_update_content.setText(text); 3 }
2、在”设置中心“界面(SettingActivity)代码中。
①.创建自定义控件类(SettingItemView)的对象(取名siv_update),并通过findViewById方法找到”设置中心“界面(SettingActivity)布局文件(activity_setting.xml)中的SettingItemView控件。
②.为自定义控件类(SettingItemView)的对象(siv_update)设置setOnClickListener()方法,并在参数中new出OnClickListener()方法,自动复写onClick方法。在onClick方法中采用if...else..语句判断自定义控件对象(siv_update)是否被选中,判断条件为siv_update.isChecked()。如果siv_update被选中,则调用自定义控件对象(siv_update)的setChecked(false)方法并传入false,以取消选中,同时调用自定义控件对象(siv_update)的setContent(text)方法并传入想要写的文本(禁止软件联网时自动更新)。反之同样处理。
自定义控件设置点击事件监听器的代码如下:
1 siv_update.setOnClickListener(new OnClickListener() { 2 3 @Override 4 public void onClick(View v) { 5 //已经开启了自动升级 6 if(siv_update.isChecked()){ 7 siv_update.setChecked(false); 8 siv_update.setContent("禁止软件联网时自动更新"); 9 }else { 10 //未开启自动升级 11 siv_update.setChecked(true); 12 siv_update.setContent("允许软件联网时自动更新"); 13 } 14 } 15 });
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。