- 本文为第六篇,主要介绍了按钮和图像显示,按钮控件Button,图像控件Imgaeview和图像按钮ImageButton,以及如何实现在按钮上同时展示图片和文字。
- 本文是对B站教程 动脑学院 Android教程学习过程中所做的笔记!
- 本文大部分为从视频中选取的知识点,其中有文字和小部分图片是由我自己编写的。
- 本文承接上一篇文章《Android移动应用开发⑤》
- 下一篇文章《Android移动应用开发⑦》
一:按钮控件Button
1.1:Button简介
我们生活中接触的最多的控件应该就是button。在xml中,button按钮控件油TextView派生而来,他们之间的区别有
- button拥有默认的按钮背景,而TextView默认无背景。
- button的内部文本默认居中对齐,而TextView默认左对齐。
- button会默认将英文字母转为大写,而TextView保持原始的英文大小写;
1.2:按钮控件新增的属性
与TextView相比,button增加了两个新属性:
- textaAllCaps属性:他指定了是否将英文字母转换成大小写,true表示自动转换成大小写,false表示不做大小写转换。
- onClick属性:它用来接管用户点击动作,指定了点击按钮时要触发哪个方法。(已不推荐使用,建议使用下面要讲的监听器)
1.3:按钮的点击事件和长按事件
监听器,意思是专门监听控件的动作行为。只有控件发生了指定的动作,监听器才会触发开关去执行对应的代码逻辑。
按钮控件有两种常用的监听器:
- 点击监听器,通过setOnClickListener方法设置。按钮被按住少于500毫秒时,会触发点击事件。
- 长按监听器,通过setOnLongClickListener方法设置。按钮被按住超过500毫秒时,会触发长按事件
小知识:按ctrl+alt+f可将变量转换为全局变量。
1.3.1:实现点击事件的方法
public class ButtonClickActivity extends AppCompatActivity implements View.OnClickListener {
private TextView tv_result;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_click);
tv_result = findViewById(R.id.tv_result);
Button btn_click_single = findViewById(R.id.btn_click_single);
btn_click_single.setOnClickListener(new MyOnClickListener(tv_result));
Button btn_click_public = findViewById(R.id.btn_click_public);
btn_click_public.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_click_public) {
String desc = String.format("%s 您点击了按钮: %s", DateUtil.getNowTime(), ((Button) v).getText());
tv_result.setText(desc);
}
}
static class MyOnClickListener implements View.OnClickListener {
private final TextView tv_result;
public MyOnClickListener(TextView tv_result) {
this.tv_result = tv_result;
}
@Override
public void onClick(View v) {
String desc = String.format("%s 您点击了按钮: %s", DateUtil.getNowTime(), ((Button) v).getText());
tv_result.setText(desc);
}
}
}
1:通过新建类继承监听器实现
先在公共类的oncreate方法中通过findViewById方法找到xml文件中的按钮,然后直接调用自己创建的继承监听器接口的MyOnClickListener类中的监听器方法。
注:这种方法需要将要修改的tv_result设为全局变量。要将自己创建的类设为static静态类,这样可以避免内存泄漏。
2:将公共类继承监听器接口实现多按钮管理
如代码中的公共类所示,直接继承View.OnClickListener,然后在按钮的setOnClickListener方法后可以直接用this来表示自己所在的类,故可以通过onclick方法直接对点击事件进行响应。对于多按钮的响应,可以再onclick方法中使用if语句来判断所点击按钮是哪个。
3:通过新特性匿名内部类来实现
下面我们用长按事件来说明这一方法
public class ButtonLongClickActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_button_long_click);
TextView tv_result = findViewById(R.id.tv_result);
Button btn_long_click = findViewById(R.id.btn_long_click);
btn_long_click.setOnLongClickListener(v -> {
String desc = String.format("%s 您点击了按钮: %s", DateUtil.getNowTime(), ((Button) v).getText());
tv_result.setText(desc);
return true;
});
}
}
通过匿名内部类直接对事件进行响应,比较方便快捷。
1.4:禁用与恢复按钮
1.4.1:按钮的两种状态
在实际业务中,按钮通常拥有两种状态,即不可用状态与可用状态,它们在外观和功能上的区别如下:
- 不可用按钮:按钮不允许点击,即使点击也没反应,同时按钮文字为灰色。
- 可用按钮:按钮允许点击,点击按钮会触发点击事件,同时按钮文字为正常的黑色。
是否允许点击由enabled属性控制,属性值为true时表示允许点击,为false时表示不允许。
从上述的区别说明可知,不可用与可用状态主要有两点差异:其一,是否允许点击;其二,按钮文字的 颜色。就文字颜色而言,可在布局文件中使用textColor属性设置颜色,也可在Java代码中调用 setTextColor方法设置颜色。至于是否允许点击,则需引入新属性android:enabled,该属性值为true时 表示启用按钮,即允许点击按钮;该属性值为false时表示禁用按钮,即不允许点击按钮。在Java代码 中,则可通过setEnabled方法设置按钮的可用状态(true表示启用,false表示禁用)。
二:图像控件
本节介绍了与图像显示有关的几种控件用法,包括:专门用于显示图片的图像视图以及若干缩放类型效 果,支持显示图片的按钮控件——图像按钮,如何在按钮控件上同时显示文本和图标等。
2.1:图像控件Imgaeview
图片通常保存为单独的图片文件,所以需要先把图片放到res/drawable目录,然后再去引用该图片的资源名称。
2.1.1:调用方式
XML文件通过属性android:src设置图片资源,属性值格式形如 “@drawable/不含扩展名的图片名称”。
Java文件中可以调用ImageView控件的setImageResource方法,方法参 数格式形如“R.drawable.不含扩展名的图片名称”。
2.1.2:缩放属性
注:居中显示fitCenter是默认的缩放类型
2.2:图像按钮ImageButton
常见的按钮控件Button其实是文本按钮,因为按钮上面只能显示文字,不能显示图片,而ImageButton才是显示图片的图像按钮。虽然ImageButton号称图像按钮,但它并非继承Button,而是继承了ImageView。区别在于 ImageButton有个按钮背景。
2.2.1:ImageButton和Button的区别
- Button既可显示文本也可显示图片(通过setBackgroundResource方法设置背景图片),而 ImageButton只能显示图片不能显示文本。
- ImageButton上的图像可按比例缩放,而Button通过背景设置的图像会拉伸变形,因为背景图采取 fitXY方式,无法按比例缩放。
- Button只能靠背景显示一张图片,而ImageButton可分别在前景和背景显示图片,从而实现两张图 片叠加的效果
2.3:在按钮上同时展现图像和文字
要想在文字周围放置图片,使用按钮控件Button就能实现
- drawableTop:指定文字上方的图片
- drawableBottom:指定文字下方的图片
- drawableLeft:指定文字左边的图片
- drawableRight:指定文字右边的图片
- drawablePadding:指定图片与文字的间距
下面是一个既有文字又有图片的按钮
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_about"
android:drawablePadding="5dp"
android:text="图标在左"
android:textSize="17sp" />