5.2 按钮类组件(初级)
在Android中,提供了一些按钮类的组件,主要包括普通按钮、图片按钮、单选按钮和复选框等。其中,普通按钮使用Button类表示,用于触发一个指定的事件;图片按钮使用ImageButton类表示,也用于触发一个指定的事件,只不过该按钮将以图像来表现;单选按钮使用RadioButton类表示;复选框使用CheckBox类表示。这两个组件最大的区别是在一组RadioButton中,只能有一个被选中,而在一组CheckBox中,则可以同时选中多个。按钮类组件的继承关系如图5.6所示。
图5.6 按钮类组件继承关系图
从图5.6中可以看出,Button组件继承自TextView,而ImageButton组件继承自ImageView组件,所以这两个组件在添加上不同,但是作用相同,都可以触发一个事件;RadioButton和CheckBox都间接继承自Button,都可以直接使用Button支持的属性和方法,所不同的是它们都比Button多了可选中的功能。下面将对4个按钮类组件分别进行介绍。
5.2.1 普通按钮
在Android手机应用中,按钮应用十分广泛。例如,QQ登录方界面中的“登录”按钮,以及微信界面中的“登录”按钮,都应用了普通按钮。
通过<Button>标记在XML布局文件中添加普通按钮的基本格式如下。
说明
由于Button是TextView的子类,所以TextView支持的属性,Button都是支持的。
例如,在屏幕中添加一个“开始游戏”按钮,代码如下。
在模拟器中运行上面这段代码,将显示如图5.7所示的运行结果。
图5.7 添加一个“开始游戏”按钮
在屏幕上添加按钮后,还需要为按钮添加单击事件监听器,这样才能让按钮发挥其特有的用途。Android提供了两种为按钮添加单击事件监听器的方法:一种是在Java代码中完成,例如,在Activity的onCreate()方法中添加如下代码。
说明
监听器类似于安防系统中安装的红外线报警器。安装了红外线报警器后,当有物体阻断红外线光束时,就会自动报警。同理,当我们为组件设置监听器后,如果有动作触发该监听器,那么就执行监听器中编写的代码。例如,为按钮设置一个单击事件监听器,那么单击这个按钮时,就会触发这个监听器,从而执行一些操作(如弹出一个对话框)。
另一种是在Activity中编写一个包含View类型参数的方法,并且将要触发的动作代码放在该方法中,然后在布局文件中,通过android:onClick属性指定对应的方法名实现。例如,在Activity中编写一个名为myClick()的方法,关键代码如下。
那么就可以在布局文件中通过android:onClick="myClick"语句为按钮添加单击事件监听器。
下面将通过一个实例来介绍如何添加普通按钮,并为按钮添加单击事件监听器。
【例5.03】 模拟微信登录按钮(实例位置:资源包\源码\05\5.03)
在Android Studio中创建Module,名称为Login Button。在该Module中实现本实例,具体步骤如下。
(1)在res/drawable节点上右击,在弹出的快捷菜单中选择New→Drawable Resource File命令,在打开的新建资源文件对话框中,输入文件名称shape,单击OK按钮,创建Shape资源文件,然后删除默认生成的源代码,在该资源文件中绘制圆角矩形,并设置文字与按钮边界的间距,关键代码如下。
(2)在默认生成的布局文件activity_main.xml中,将默认添加的布局管理器修改为相对布局管理器,然后添加Button普通按钮控件并设置按钮的背景资源shape,最后为按钮设置单击事件的方法名称,代码如下。
(3)打开MainActivity类,该类继承Activity,然后创建onLogin()方法,实现“登录”按钮的单击事件,代码如下。
(4)运行本实例,再单击右侧的按钮,运行效果如图5.8所示,单击“登录”按钮,将显示如图5.9所示的消息提示框。
图5.8 微信登录按钮
图5.9 消息提示框
5.2.2 图片按钮
在Android手机应用中,图片按钮应用也很常见。例如,开心消消乐游戏的开始游戏界面中的“开始游戏”和“切换账号”按钮,以及全民飞机大战游戏的破纪录页面中的“确定”“炫耀一下”和查看奖励明细的按钮,都应用了图片按钮。
图片按钮与普通按钮的使用方法基本相同,只不过图片按钮使用<ImageButton>标记定义,并且可以为其指定android:src属性,用于设置要显示的图片。在布局文件中添加图片按钮的基本语法格式如下。
重要属性说明如下。
android:src属性:用于指定按钮上显示的图片。
android:scaleType属性:用于指定图片的缩放方式,其属性值如表5.2所示。
表5.2 android:scaleType属性的属性值说明
例如,在屏幕中添加一个代表播放的图片按钮,代码如下。
在模拟器中运行上面这段代码,将显示如图5.10所示的运行结果。
图5.10 添加一个播放按钮
说明
如果在添加图片按钮时,不为其设置android:background属性,那么作为按钮的图片将显示在一个灰色的按钮上,也就是说所添加的图片按钮将带有一个灰色立体的边框。不过这时的图片按钮将会随着用户的动作而改变。一旦为其设置了android:background属性,它将不会随着用户的动作而改变。如果要让其随着用户的动作而改变,就需要使用StateListDrawable资源来对其进行设置。
同普通按钮一样,也需要为图片按钮添加单击事件监听器,具体添加方法同普通按钮,这里不再赘述。下面通过一个实例来演示图片按钮的使用。
【例5.04】 开心消消乐的“开始游戏”和“切换账号”按钮(实例位置:资源包\源码\05\5.04)
在Android Studio中创建Module,名称为Start Game Button。在该Module中实现本实例,具体步骤如下。
(1)修改新建Module的res\layout目录下的布局文件activity_main.xml,将默认添加的布局管理器修改为垂直线性布局管理器,并将默认添加的文本框组件删除。
(2)设置线性布局管理器的背景为复制到mipmap目录下的开心消消乐的背景图片,并设置底部居中对齐,以及底边距为20dp,关键代码如下。
(3)在线性布局管理器中,添加两个图片按钮,分别为“开始游戏”按钮和“切换账号”按钮。主要是通过android:src属性设置图片,以及通过android:background属性设置背景透明,具体代码如下。
注意
在设置组件ID时,不能使用Java关键字。例如在上面的代码中,就不能把ID属性值设置为@+id/switch,否则将出现资源名不能使用Java关键字(Resource name cannot be a Java keyword ...)的错误。
(4)打开主活动MainActivity.java文件,修改默认生成的代码,让MainActivity直接继承Activity,并导入android.app.Activity类,然后在onCreate()方法中添加设置全屏的代码,修改后的具体代码如下。
(5)在主活动MainActivity的onCreate()方法中,为“开始游戏”图片按钮添加单击事件监听器,在重写的onClick()方法中弹出相应的消息提示框,关键代码如下。
(6)按照步骤(5)的方法再为“切换账号”图片按钮添加单击事件监听器,具体代码请参见资源包。
(7)运行效果如图5.11所示,单击“开始游戏”按钮,将显示如图5.12所示的消息提示框。
图5.11 开心消消乐的“开始游戏”和“切换账号”按钮
图5.12 单击“开始游戏”按钮显示的消息提示框