安卓开发教程15:Button按钮详解(中)

167 阅读3分钟

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

上一篇文章中,我们介绍了Button控件的基本使用方法,以及利用onClick属性的方式来添加点击事件的方法。我们说了这种方式已经被淘汰,并且系统也推荐我们用 View.setOnClickListener 的方式来添加点击事件,今天我们来看一下 View.setOnClickListener 的方式怎么来添加点击事件。

从setOnClickListener这个的命名方式上,我们可以看出来这是一个对点击事件的监听行为(当某空间发生了指定的行为,监听器就会触发并且去执行相对的代码)。

常见的事件监听器:

  1. setOnClickListener 点击监听器,按钮被按住少于500毫秒的时候触发
  2. setOnLongClickListener 长按监听器,按钮被按住超过于500毫秒的时候触发

说明:我们还沿用上一个示例,新增一个按钮设定 id 为 bt_2:点击按钮,下方TextView内容显示我们点击了多少次按钮。

步骤:

  1. 首先用findViewById 获取到 bt_2 ,Button 控件
  2. 在onCreate 中,给bt_2 添加监听器并写入显示点击次数的方法

代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_button_test);
    
    tv_text1 = findViewById(R.id.tv_text1);
    b_number = 0;

    bt_2 = findViewById(R.id.bt_2);
    bt_2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            b_number++;
            tv_text1.setText("按钮被点击 "+ b_number +"次");
        }

    });
}

效果:

image.png

如果我们想在添加一个Button也实现记录点击次数的功能,很显然只需要在onCreate中按照以上方法,在创建一个监听器就可以。但是如果我们需要10个20个或者更多的Button实现同一个功能的时候怎么办呢。

首先我们来看一下setOnClickListener

image.png

我们发现setOnClickListener 实际上是需要一个View.OnClickListener的接口监听对象。

↓↓↓

再来看View.OnClickListener

image.png

OK知道其原理之后,我们可以实现一个类 MyOnClickListent,再次添加监听的时候就实例化MyOnClickListent这个类。

步骤:

  1. 首先用findViewById 获取到 bt_1,Button 控件
  2. 在onCreate 中,给bt_1 添加监听器实例化MyOnClickListent类并把 tv_text1 与 b_number 传递到其中。
  3. 创建MyOnClickListent类,声明 tv_text1 与 b_number 属性,并给其赋值。
  4. onClick实现显示点击次数的方法

代码:


protected void onCreate(Bundle savedInstanceState) {

    bt_1 = findViewById(R.id.bt_1);
    bt_1.setOnClickListener(new MyOnClickListent((TextView) tv_text1, (int) b_number));

}


static class MyOnClickListent implements View.OnClickListener{

    //声明属性
    private final TextView tv_text1;
    private int b_number;

    //用构造方法给属性赋值
    public MyOnClickListent(TextView bt_1,int b_number) {
        this.tv_text1 = bt_1;
        this.b_number = b_number;
    }

   //实现效果
    @Override
    public void onClick(View v){
        b_number++;
        tv_text1.setText("按钮被点击 "+ b_number +"次");
    }
}

如果在多个按钮我们想要区分哪一按钮被点击的时候,我们还可以这么写。

步骤:

  1. Activite实例让当前这个类来实现OnClickListener这个接口
  2. 在onClick实现显示点击次数的方法
  3. 利用getId()方法区分不同的按钮
public class ButtonTest extends AppCompatActivity implements View.OnClickListener {

    @Override
    rotected void onCreate(Bundle savedInstanceState) {
        bt_3 = findViewById(R.id.bt_3);
        bt_3.setOnClickListener((View.OnClickListener) this);
    }
    

    @Override
    public void onClick(View v) {
        if(v.getId() == R.id.bt_1){
            //相应的操作
        }else if(v.getId() == R.id.bt_2){
            //相应的操作
        }else if(v.getId() == R.id.bt_3){
            //相应的操作
        }

        b_number++;
        tv_text1.setText("按钮被点击 "+ b_number +"次");
    }
}

那么Button 的 setOnClickListener监听器的使用方法我们就暂时介绍到这来,下一篇文章我们再来了解一下setOnLongClickListener监听器,以及Button的其他属性。