三个月前初学Android时,公司要求我们刚入职的应届小白写知识分享,于是结合实操的Demo写了一篇关于Button点击事件的分享。因为是初学的缘故,所以当时写的很细,恨不得把每一个操作步骤都写进去,趁着今天周末,就又整理了一下。希望能帮到和当初的我一样的Android初学者。

下面是这篇分享:

Button是按钮,是用于响应用户的一系列点击事件,使程序更加流畅和完整。Button实现点击事件有三种常用的实现方式,三种方法的具体实现步骤如下所示。

方法一:指定Button的onClick属性方式

  1. 首先在layout文件中指定onClick属性:
android:onClick=”click”
  1. 然后在Activity中实现这个click方法
1. public void click(View v){
 Log.i(“指定onClick属性方式”,”button is clicked”);
 }

注意:Activity中实现的方法名称要与onClick属性设置的名称一致。

Demo:
我们首先创建一个项目ButtonDemo01,并将主活动命名 MainActivity,接着在布局文件中放入一个Button按钮和一个TextView。Button按钮用于点击事件实现,TextView通过内容的变化,用于直观的展示点击效果。最后在Button按钮中添加一行属性,即android:onClick=”click”.
布局文件具体内容如下图所示:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮被点击了么" />

    <Button
        android:id="@+id/btn_onclick"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="click"
        android:text="onClick方式" />
</LinearLayout>

Button按钮中添加完属性后,我们则需在MainActivity中将Button中指定的方法写出,即click方法,这个方法用于实现将页面中TextView中的内容进行改变。于是首先我们定义TextView变量并通过findViewById方法对其进行赋值,然后就可以在click中使用该变量调用setText方法对TextView的值进行修改。

需要注意的是,我们在调用findViewById方法时,需进行强制的类型转换。

完整的MainActivity代码实现如下所示:

public class MainActivity extends AppCompatActivity {

    private TextView tv_show;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);

        tv_show=(TextView)findViewById(R.id.tv_show);
    }

    public void click(View v){
        tv_show.setText("Onclick方式处理事件.");
    }
}

运行一下程序,该布局文件显示效果如下图所示:

Androidbutton设置为不能点击 android button点击效果_布局文件

当我们点击“ONCLICK方式”按钮时,TextView中的内容变成了“OnClick方式处理事件”,效果如下图所示:

Androidbutton设置为不能点击 android button点击效果_布局文件_02

即事件的处理成功通过设置onClick属性的方式得以实现。


方法二:匿名内部类方式
在Activity中添加匿名内部类

btn.setOnClickListener(new View.OnClickListener(){
      @Override
      public void onClick(View v){
      Log.i(“匿名内部类方式”,”button is clicked”);
   }
});

即首先要找到需要点击的Button名字,随后给它添加一个事件监听setOnClickListener,当Button被点击后就会被成功监听,随后其中的onClick方法会被调用。

Demo:
我们首先创建一个项目ButtonDemo02,并将主活动命名 MainActivity,接着在布局文件中放入一个Button按钮和一个TextView。Button按钮用于点击事件实现,TextView通过内容的变化,用于直观的展示点击效果。实现方式与方法一致,布局文件具体内容如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮被点击了么?" />

    <Button
        android:id="@+id/btn_anonymous"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="匿名内部类方式" />
</LinearLayout>

接下来我们需要做的是在MainActivity中添加具体实现代码。此时除了定义TextView变量之外,我们还需定义Button变量,再通过findViewById方法对变量进行赋值。变量定义并赋值后,我们则可以开始为Button按钮添加事件监听,即使用按钮的变量值调用事件监听setOnClickListener。
需要注意的是,OnClickListener()是一个接口,对于我们初学者来说,这里给人的感觉是new了一个接口,其实不是这样的。new的话它肯定是new了一个类的对象,而这个类是实现了OnClickListener接口,所以之所以叫匿名内部类,是因为创建了一个类的对象,但是这个类的名字是什么我们并不知道,所以叫匿名的内部类对象。
接下来和方法一中一样,我们需在onClick方法中调用setText方法实现TextView中的内容变化。完整的MainActivity代码实现如下所示:

public class MainActivity extends AppCompatActivity {
    private TextView tv_show;
    private Button btn_anonymous;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);

        tv_show= (TextView)findViewById(R.id.tv_show);
        btn_anonymous=(Button)findViewById(R.id.btn_anonymous);

        btn_anonymous.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                tv_show.setText("匿名内部类处理事件");
            }
        });

    }
}

运行一下程序,布局文件显示效果如下图所示:

Androidbutton设置为不能点击 android button点击效果_android_03

点击其中的“匿名内部类方式”按钮,则TextView中的文字发生了改变,表示匿名内部类方式点击事件的成功实现。效果如下图所示:

Androidbutton设置为不能点击 android button点击效果_匿名内部类_04

方法三:接口方式

  1. 首先当前Activity实现OnClickListener接口
1. Public class MainActivity extends Activity implements onClickListener();
  1. 然后实现接口方法
1. @Override
 public void onClick(View v){
 Log.i(“接口方式”,”button is clicked”);
 }
  1. 最后绑定到Button上
3. btn.setOnClickListener(this);

步骤(3)这边需要说明的是,使用方法二匿名内部类方法的时候,括号里创建了一个对象,而这边可以使用this,是因为我们在这个地方的setOnClickListener它需要的是一个对象,这个对象有一个特殊的要求,就是必须要实现onClickListener接口的一个对象,而我们的MainActivity实现了onClickListener接口,所以MainActivity这个对象就是满足要求的,可以放入其中。

Demo:
我们首先创建一个项目ButtonDemo03,并将主活动命名 MainActivity,接着在布局文件中放入一个Button按钮和一个TextView。Button按钮用于点击事件实现,TextView通过内容的变化,用于直观的展示点击效果。实现方式与前两种方法一致,布局文件具体内容如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/tv_show"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="按钮被点击了么?" />

    <Button
        android:id="@+id/btn_interface"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="接口方式" />
</LinearLayout>

接下来我们开始具体的实现过程。首先还是在MainActivity中先定义和赋值两个对象变量,方法与之前的方法一、方法二中的完全一致。接下来我们要给Button添加事件监听,于是首先让MainActivity类实现View.OnClickListener,并且通过键盘的alt和enter直接添加接口的onClick方法,在onClick方法中使用setText方法实现文本内容的改变。最后我们在onCreate方法中使用Button的变量调用setOnClickListener(this),这样便完成了Button按钮事件监听的一个处理过程。

/**
 * 方法三:采用接口方式处理事件
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener{ //首先让MainActivity实现接口,然后定义onClick方法

    private TextView tv_show;
    private Button btn_interface;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_button);

        tv_show=(TextView)findViewById(R.id.tv_show);
        btn_interface=(Button)findViewById(R.id.btn_interface);

        btn_interface.setOnClickListener(this);  //接着添加一个事件监听,然后将MainActivity这个对象自己放入,即this
    }

    @Override
    public void onClick(View v) {
        tv_show.setText("接口方式处理事件。");
    }
}

接着我们运行程序,效果如下图所示:

Androidbutton设置为不能点击 android button点击效果_匿名内部类_05

点击其中的“接口方式”按钮,则TextView中的文字发生了改变,表示接口方式点击事件的成功实现。效果如下图所示:

Androidbutton设置为不能点击 android button点击效果_android_06