持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情
在上一篇文章中我们对Button控件的 setOnClickListener 监听器的使用方法进行了详细的了解。我们平时比较多用到的还有长按的监听器 setOnLongClickListener,那么今天我们就来看一下 setOnLongClickListener 监听器的使用方法,以及自定义按钮的写法。
setOnLongClickListener 监听器的使用方法
setOnLongClickListener 监听器 需要返回一个 布尔类型值,用来判断是否向上冒泡。(true 不向上冒泡,flase 向上冒泡)
示例:
我们来创建一个新的Activity,其中包含一个按钮 id 为 lbt_1,和一个 TextView id 为 ltv_1。 当我们长按 lbt_1 的时候,ltv_1的文本会变为“按钮已经被长按”
步骤:
- 首先获取控件 lbt_1, 以及 ltv_1。
- 给 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;
}
});
效果:
注意:在我们把鼠标放到View.OnLongClickLIstener上面的时候,Android Studio 给我们提示,可以使用 lambda 表达式,也就是箭头函数的方式来写。lambda表达式是在 Java 8 才发布的新特性,之前的版本不支持。
lbt_1.setOnLongClickListener(view -> {
ltv_1.setText("按钮已经被长按");
return true;
});
Button 的监听器还有很多,我们在以后实际使用过程中在逐步学习。
自定义按钮
我们都知道UI的想象力是非常丰富的,产品的思维方式是天马行空的。按钮可以长成任何一种样子,那么当我们需要对一个按钮1:1复原设计稿的时候,我们就需要利用StateListDrawable实现了。
步骤:
- 新建一个drawable文件,文件中写好我们想要的样式。
- 在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">
再次运行,我们发现按钮颜色已经变成为我们设置的颜色,点击的时候颜色也会随之变化。
关于Button 按钮控件我们就先了解这么多,还有其他一些方面的知识,可以在以后实际开发过程中用到的时候再学习。