安卓开发教程16:Button按钮详解(下)

891 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情

在上一篇文章中我们对Button控件的 setOnClickListener 监听器的使用方法进行了详细的了解。我们平时比较多用到的还有长按的监听器 setOnLongClickListener,那么今天我们就来看一下 setOnLongClickListener 监听器的使用方法,以及自定义按钮的写法。

setOnLongClickListener 监听器的使用方法

setOnLongClickListener 监听器 需要返回一个 布尔类型值,用来判断是否向上冒泡。(true 不向上冒泡,flase 向上冒泡)

示例:

我们来创建一个新的Activity,其中包含一个按钮 id 为 lbt_1,和一个 TextView id 为 ltv_1。 当我们长按 lbt_1 的时候,ltv_1的文本会变为“按钮已经被长按”

步骤:

  1. 首先获取控件 lbt_1, 以及 ltv_1。
  2. 给 lbt_1 添加监听器,并在长按按钮时候使 ltv_1 文字内容产生变化。

代码:


ltv_1 = findViewById(R.id.ltv_1);
Button lbt_1 = findViewById(R.id.lbt_1);

lbt_1.setOnLongClickListener(new View.OnLongClickListener() {

    @Override
    public boolean onLongClick(View view) {
    
        ltv_1.setText("按钮已经被长按");
        
        return true;
    }

});

效果:

image.png

注意:在我们把鼠标放到View.OnLongClickLIstener上面的时候,Android Studio 给我们提示,可以使用 lambda 表达式,也就是箭头函数的方式来写。lambda表达式是在 Java 8 才发布的新特性,之前的版本不支持。

image.png

lbt_1.setOnLongClickListener(view -> {

    ltv_1.setText("按钮已经被长按");
    return true;
});

Button 的监听器还有很多,我们在以后实际使用过程中在逐步学习。

自定义按钮

我们都知道UI的想象力是非常丰富的,产品的思维方式是天马行空的。按钮可以长成任何一种样子,那么当我们需要对一个按钮1:1复原设计稿的时候,我们就需要利用StateListDrawable实现了。

步骤:

  1. 新建一个drawable文件,文件中写好我们想要的样式。
  2. 在Button控件中 background 属性 引用这个drawablle文件

代码:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!--定义一个红色背景,圆角按钮-->
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android">
            <solid android:color="#00000000" />
            <stroke android:width="0dp" android:color="@color/teal_200" />
            <corners android:radius="50dp"/>
        </shape>
    </item>
    <!--当按钮被按下时,背景变色,圆角取消-->
    <item android:state_pressed="true">
        <shape>
            <solid android:color="@color/teal_200" />
        </shape>
    </item>

</selector>

理论上来说应该已经奏效了,我们点击运行看一下,发现圆角取消掉了,但是背景颜色不会变。

这个是因为Android Studio 4.1 以后的版本, Button 都是 Material 类型的 Button 默认使用了主题颜色,需要修改一下 res > values > thenes.xml 文件, 我们把 < style > 标签中的 parent 属性 修改为

    
    <style name="Theme.MyApplication" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
        

再次运行,我们发现按钮颜色已经变成为我们设置的颜色,点击的时候颜色也会随之变化。

image.png

关于Button 按钮控件我们就先了解这么多,还有其他一些方面的知识,可以在以后实际开发过程中用到的时候再学习。