Android移动应用开发教程⑥

  • 本文为第六篇,主要介绍了按钮和图像显示,按钮控件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" />

猜你喜欢

转载自blog.csdn.net/qq_64618483/article/details/129357185