这是我参与「第四届青训营 」笔记创作活动的第3天。
1.按钮类型
1.1 按钮的三种类型
我们可以通过三种方式在布局中创建按钮。在这里我们可以创建仅包含文本的按钮,仅包含图标的按钮,还有同时包含文本和图标的按钮。
1.2 仅包含文本的按钮
如果我们创建的是仅包含文本的按钮,需要使用Button类。演示代码如下:
<Button
android:id="@+id/btn_click_single"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="这是一个按钮"
android:textColor="#000000"
android:textSize="15sp"/>
效果如下:
1.3 仅包含图标的按钮
如果我们创建的是仅包含图标的按钮,需要使用ImageButton类。演示代码如下:
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_selector" />
效果如下:
1.4 同时包含文本和图标的按钮
如果我们创建的是同时包含文本和图标的按钮,则需要使用回一趟android:drawableLeft属性的Button。演示代码如下:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是一个按钮"
android:drawableLeft="@drawable/btn_selector"/>
效果如下:
2.1 响应点击事件
当用户点击按钮时,Button对象会收到点击事件。如果要为按钮定义点击事件处理脚本,则将android:onClick属性添加到XML布局中的<Button>元素。此属性的值必须是为了响应点击事件而调用的方法的名称。
在这里举个例子:
<Button
android:id="@+id/button_listen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="这是一个播放按钮"
android:onClick="listen" />
同时,我们需要在管理这个布局的Activity内使用listenMusic来处理点击事件:
public void listenMusic(View view){
// listen to the music
}
我们在android:onClick属性中声明的方法必须有改签名。但同时我们也要注意的是,这个方法需要满足一定的条件。
2.1.1 我们需要满足的条件:
- 公开
- 返回void
- 将
View指定为其唯一的参数
2.2 使用onClickListener
我们可以通过程序化方式声明点击事件处理脚本,而不是在XML布局中。若要在运行时实例化Button,或者需要在Fragment子类中声明点击行为,则可能必须要这样做。
我们若是要以程序化方式来声明事件处理脚本,则需要创建一个View.OnClickListener对象,并且调用setOnClickListener(View.OnClickListener)来将其分配给按钮。
举例如下:
Button button = (Button) findViewById(R.id.button_listen);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Listen to the music
}
});
3.注意点
3.1 按钮控件Button
按钮控件Button由TextView派生而来。它们之间的区别有:
- Button拥有默认的按钮背景,而TextView默认无背景。
- Button的内部文本默认居中对齐,而TextView的内部文本默认靠左对齐。
- Button会默认将英文字母转为大小写,而TextView保持原始的英文大小写。
3.2 图像按钮ImageButton
ImageButton是显示图片的图像按钮,但它继承ImageView,而非继承Button。 ImageButton和Button的区别:
- Button既可以显示文本也可显示图片,ImageButton只能显示图片不能显示文本。
- ImageButton上的图像可按比例缩放,而Button通过背景设置的图像会拉伸变形。
- Button只能靠背景显示一张图片,而ImageButton可分别在前景和背景显示图片,从而实现两张图片叠加的效果。