Android开发笔记(三十七)按钮类控件

Button与ImageButton

Button是文本按钮(继承自TextView),而ImageButton是图像按钮(继承自ImageView)。两者之间的区别在于: 1、Button即可显示文本也可显示图形(通过设置背景图),而ImageButton只能显示图形不能显示文本; 2、Button可在文本周围区域显示小图,而ImageButton无法在某个区域显示小图; 3、ImageButton上的图像可按比例进行拉伸,而Button上的大图会拉伸变形(因为背景图无法按比例拉伸); 从上面可以看出,Button的适应面更广,所以实际开发中基本使用Button。 Button与ImageButton的单击方法是setOnClickListener,对应的监听器要实现接口View.OnClickListener。长按方法是setOnLongClickListener,对应的监听器要实现接口View.OnLongClickListener。下面是Button按键监听器的代码例子:

		btn.setOnClickListener(new MyOnClickListener());
		btn.setOnLongClickListener(new MyOnLongClickListener());
		
	class MyOnClickListener implements View.OnClickListener{
		@Override
		public void onClick(View v) {
			Toast.makeText(MainActivity.this, "您点击了控件"+v.getId(), Toast.LENGTH_LONG).show();
		}
	}


	class MyOnLongClickListener implements View.OnLongClickListener{
		@Override
		public boolean onLongClick(View v) {
			Toast.makeText(MainActivity.this, "您长按了控件"+v.getId(), Toast.LENGTH_LONG).show();
			return true;
		}
	}

CompoundButton

CompoundButton是抽象的复合按钮,因为是抽象的,所以并不能直接使用。实际开发中用的是它的两个派生类,分别是CheckBox和RadioButton,派生类继承了CompoundButton新增的属性和方法。 xml布局上新加的属性设置: checked : 指定按钮的勾选状态,true表示勾选,false表示未勾选。 button : 指定左侧勾选图标的图形。如果不指定就使用系统的默认图标;如果要自定义图标就要设置该属性,当然也可以将该属性设置为@null,然后到drawableLeft中设置新图标。 代码中新加的方法: setChecked : 设置按钮的勾选状态。 setButtonDrawable : 设置左侧勾选图标的图形。 setOnCheckedChangeListener : 设置勾选变化的监听器 isChecked : 判断按钮是否选中

CheckBox

CheckBox是复选框,点击勾选,再点击则取消勾选。CheckBox是CompoundButton的一个子类,所以继承了CompoundButton的所有属性和方法。 CheckBox的勾选方法是setOnCheckedChangeListener,对应的监听器要实现接口CompoundButton.OnCheckedChangeListener。下面是CheckBox勾选监听器的代码例子:

		cb.setOnCheckedChangeListener(new MyCbCheckListener());
		
	class MyCbCheckListener implements CompoundButton.OnCheckedChangeListener{
		@Override
		public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
			String desc = String.format("您勾选了控件%d,当前状态为%b", buttonView.getId(), isChecked);
			Toast.makeText(MainActivity.this, desc, Toast.LENGTH_LONG).show();
		}
	}

RadioGroup和RadioButton

RadioButton是单选框,点击选中,但是再点击不会取消选中。只有点击同组的其他RadioButton,原来勾选的RadioButton才会取消选中。RadioButton也是CompoundButton的一个子类,所以继承了CompoundButton的所有属性和方法。 RadioGroup是容纳多个RadioButton的组布局,同组中只能有一个RadioButton被选中。下面是RadioGroup常用的几个方法: setCheckedId : 选中指定ID的RadioButton。 getCheckedRadioButtonId : 获取选中状态RadioButton的ID。 setOnCheckedChangeListener : 设置勾选变化的监听器。 RadioGroup/RadioButton的选中事件一般由RadioGroup来响应,具体方法是setOnCheckedChangeListener,对应的监听器要实现接口RadioGroup.OnCheckedChangeListener。下面是RadioGroup选中监听器的代码例子:

		rg.setOnCheckedChangeListener(new MyRgCheckListener());


	class MyRgCheckListener implements RadioGroup.OnCheckedChangeListener{
		@Override
		public void onCheckedChanged(RadioGroup group, int checkedId) {
			Toast.makeText(MainActivity.this, "您选中了控件"+checkedId, Toast.LENGTH_LONG).show();
		}
		
	}

Switch

Switch是个开关按钮,继承自CompoundButton,从Android 4.1.2开始支持。其实Switch就是个特殊UI的CheckBox,在选中与取消选中时,可展现的界面元素要比复选框要丰富些。 xml布局上新加的属性设置: textOn : 指定右侧开启时候的文本。 textOff : 指定左侧关闭时候的文本。 switchPadding : 指定左右两个开关按钮之间的距离。 thumbTextPadding : 指定文本左右两边的距离。如果设置了该属性,则switchPadding属性失效。 thumb : 指定开关轨道的背景。 track : 指定开关标识的图标。 代码中新加的方法: setTextOn : 设置右侧开启时候的文本。 setTextOff : 设置左侧关闭时候的文本。 setSwitchPadding : 设置左右两个开关按钮之间的距离。 setThumbTextPadding : 设置文本左右两边的距离。如果设置了该方法,则setSwitchPadding方法失效 setThumbDrawable/setThumbResource : 设置开关轨道的背景。 setTrackDrawable/setTrackResource : 设置开关标识的图标。 现在不管是用户还是app都喜欢追求高大上,于是Android的应用界面也纷纷向ios看齐,最典型的便是底部标签栏TabBar,原本Android希望大家把标签栏放在页面顶部,可是ios的TabBar却放在页面底部,所以安卓app都跟风放在底部。与之类似的还有ios的UISwitch开关控件,下面是UISwitch控件开关两个状态下的UI:

Android自带的Swtich与ios的UISwitch比起来,默认的UI很难看。为了实现ios的Switch效果,我们还是自己动手改改吧,其实也很简单,主要思想是利用CheckBox+StateDrawable,首先定义一个drawable文件用于描述不同按下状态时的图片,具体如下:

<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:drawable="@drawable/switch_on" android:state_checked="true"/>
    <item android:drawable="@drawable/switch_off" android:state_checked="false"/>
    <item android:drawable="@drawable/switch_off"/>
</selector>

接着就可以在布局文件的CheckBox将该drawable设置为背景了,布局例子如下:

    <CheckBox
        android:id="@+id/ck_switch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:button="@null"
        android:checked="false"
        android:drawableLeft="@drawable/ck_switch_selector" />

点此查看Android开发笔记的完整目录

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券