今天學習安卓應用中的按鈕點擊事件:
總結下來在安卓應用中的Button注冊點擊事件的方法主要是以下4種方法,稍后會逐個介紹:
第一種方法:自定義內部類的方法
第二種方法:匿名內部類的方法
第三種方法:當前Activity去實現事件接口的方法
第四種方法:在布局文件中添加點擊事件屬性的方法
首先新建一個Activity文件:
然后把一起自動生成的activity_button.xml文件中的最外層布局更改為線性布局
android:orientation="vertical" 是用于 線性布局(LinearLayout) 的一個核心屬性,它決定了該布局內所有子視圖(子控件)的排列方向
然后添加4個按鈕控件:
下面來介紹第一種方法? ? ?自定義內部類的方法:
首先在第一個按鈕中添加一個id為:btn1
然后在ButtonActivity.java文件中書寫代碼:
package com.example.android1;import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.util.Log;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class ButtonActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_button);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});Button btn1 = findViewById(R.id.btn1); //創建一個按鈕類型的變量btn1 存放的是id為btn1的控件//點擊事件,被點擊是觸發的事件//整體語法結構:// [類型] [變量名] = new [構造函數];Myclick mck = new Myclick(); //創建了一個名為 mck 的變量,它的類型是 Myclick 類,然后使用 new 關鍵字實例化(創建)了一個 Myclick 類的對象,并將這個對象賦值給變量 mckbtn1.setOnClickListener(mck); //為按鈕注冊點擊事件監聽器}// 1 class Java/Kotlin 中聲明類的關鍵字。// 2 Myclick 類的名稱。遵循大駝峰命名法(CamelCase),是您自己定義的標識符。// 3 implements Java 中表示實現一個接口的關鍵字。(在 Kotlin 中使用 :)// 4 View.OnClickListener 要實現的接口的全限定名。View 是安卓的視圖類,OnClickListener 是定義在 View 類內部的接口。//整體語法結構://[訪問修飾符] class [類名] implements [接口名]//聲明了一個名為 Myclick 的類,這個類實現了 View.OnClickListener 接口。這意味著 Myclick 類承諾將提供 OnClickListener 接口中定義的 onClick 方法的具體實現,從而成為一個可以處理按鈕等視圖點擊事件的“點擊監聽器”。class Myclick implements View.OnClickListener{@Override //這是一個給編譯器看的“保證書”,保證下面的 onClick 方法是正確重寫了接口中的方法,不是我自己隨便寫的新方法。 //編譯器指令:我在重寫接口的方法 確保正確重寫,避免錯誤public void onClick(View view) { //這是聲明方法的規則,表示“當點擊事件發生時,我會被調用,并且我會知道是哪個View被點擊了”。 //方法聲明:定義如何處理點擊事件 實現接口契約,接收被點擊的視圖//在控制臺輸出語句Log.e("tag","通過自定義內部類實現點擊事件的按鈕被點擊了");}}
}
最后修改注冊文件:
都寫完之后點擊模擬如果有沒有導入的情況就按照下面的方法來處理:
接下來就是模擬看日志輸出了:
第二種方法:匿名內部類的方法
首先為第二個按鈕添加一個id:btn2:
然后在ButtonActivity.java文件中添加代碼:
所有的代碼如下:
package com.example.android1;import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;import android.util.Log;
import android.widget.Button;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class ButtonActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_button);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});Button btn1 = findViewById(R.id.btn1); //創建一個按鈕類型的變量btn1 存放的是id為btn1的控件//點擊事件,被點擊是觸發的事件//整體語法結構:// [類型] [變量名] = new [構造函數];Myclick mck = new Myclick(); //創建了一個名為 mck 的變量,它的類型是 Myclick 類,然后使用 new 關鍵字實例化(創建)了一個 Myclick 類的對象,并將這個對象賦值給變量 mckbtn1.setOnClickListener(mck); //為按鈕注冊點擊事件監聽器//下面是第二種方法的實現:通過匿名內部類實現點擊事件Button btn2=findViewById(R.id.btn2);btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Log.e("tag", "通過匿名內部類實現點擊事件");}});}// 1 class Java/Kotlin 中聲明類的關鍵字。// 2 Myclick 類的名稱。遵循大駝峰命名法(CamelCase),是您自己定義的標識符。// 3 implements Java 中表示實現一個接口的關鍵字。(在 Kotlin 中使用 :)// 4 View.OnClickListener 要實現的接口的全限定名。View 是安卓的視圖類,OnClickListener 是定義在 View 類內部的接口。//整體語法結構://[訪問修飾符] class [類名] implements [接口名]//聲明了一個名為 Myclick 的類,這個類實現了 View.OnClickListener 接口。這意味著 Myclick 類承諾將提供 OnClickListener 接口中定義的 onClick 方法的具體實現,從而成為一個可以處理按鈕等視圖點擊事件的“點擊監聽器”。class Myclick implements View.OnClickListener{@Override //這是一個給編譯器看的“保證書”,保證下面的 onClick 方法是正確重寫了接口中的方法,不是我自己隨便寫的新方法。 //編譯器指令:我在重寫接口的方法 確保正確重寫,避免錯誤public void onClick(View view) { //這是聲明方法的規則,表示“當點擊事件發生時,我會被調用,并且我會知道是哪個View被點擊了”。 //方法聲明:定義如何處理點擊事件 實現接口契約,接收被點擊的視圖//在控制臺輸出語句Log.e("tag","通過自定義內部類實現點擊事件的按鈕被點擊了");}}
}
最后模擬運行,看運行效果:
第三種方法:當前Activity去實現事件接口的方法
首先添加語句:
按照上圖的方法點擊,接著在點擊下圖的順序自動填好要用的點擊方法:
按照以上方法自動填充代碼:
在里面寫點擊后的動作就好了:
整體代碼如下:
package com.example.android1;import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;import android.util.Log;
import android.widget.Button;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class ButtonActivity extends AppCompatActivity implements View.OnClickListener {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_button);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});Button btn1 = findViewById(R.id.btn1); //創建一個按鈕類型的變量btn1 存放的是id為btn1的控件//點擊事件,被點擊是觸發的事件//整體語法結構:// [類型] [變量名] = new [構造函數];Myclick mck = new Myclick(); //創建了一個名為 mck 的變量,它的類型是 Myclick 類,然后使用 new 關鍵字實例化(創建)了一個 Myclick 類的對象,并將這個對象賦值給變量 mckbtn1.setOnClickListener(mck); //為按鈕注冊點擊事件監聽器//下面是第二種方法的實現:通過匿名內部類實現點擊事件Button btn2=findViewById(R.id.btn2);btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Log.e("tag", "通過匿名內部類實現點擊事件");}});// 第三種方法:通過當前Activity實現點擊事件接口Button btn3 = findViewById(R.id.btn3);btn3.setOnClickListener(this);}@Overridepublic void onClick(View view) {Log.e("tag", "通過當前Activity實現點擊事件接口");}// 1 class Java/Kotlin 中聲明類的關鍵字。// 2 Myclick 類的名稱。遵循大駝峰命名法(CamelCase),是您自己定義的標識符。// 3 implements Java 中表示實現一個接口的關鍵字。(在 Kotlin 中使用 :)// 4 View.OnClickListener 要實現的接口的全限定名。View 是安卓的視圖類,OnClickListener 是定義在 View 類內部的接口。//整體語法結構://[訪問修飾符] class [類名] implements [接口名]//聲明了一個名為 Myclick 的類,這個類實現了 View.OnClickListener 接口。這意味著 Myclick 類承諾將提供 OnClickListener 接口中定義的 onClick 方法的具體實現,從而成為一個可以處理按鈕等視圖點擊事件的“點擊監聽器”。class Myclick implements View.OnClickListener{@Override //這是一個給編譯器看的“保證書”,保證下面的 onClick 方法是正確重寫了接口中的方法,不是我自己隨便寫的新方法。 //編譯器指令:我在重寫接口的方法 確保正確重寫,避免錯誤public void onClick(View view) { //這是聲明方法的規則,表示“當點擊事件發生時,我會被調用,并且我會知道是哪個View被點擊了”。 //方法聲明:定義如何處理點擊事件 實現接口契約,接收被點擊的視圖//在控制臺輸出語句Log.e("tag","通過自定義內部類實現點擊事件的按鈕被點擊了");}}
}
最后就是模擬運行的結果了:
第四種方法:在布局文件中添加點擊事件屬性的方法
在布局文件中為第四個按鈕添加一個屬性叫onclick為其添加一個值為myclick(自定義的方法名)
然后在ButtonActivity.java文件中寫布局文件中按鈕綁定的方法,之后就可以模擬測試了:
第四種方法還可以綁定多個按鈕,進入同一個方法內進行處理:
首先就是在布局中再添加一個按鈕都要有id屬性啊,綁定的都是同一種方法,具體是哪個按鈕點擊的就要去方法里面去分辨了:
然后在ButtonActivity.java中寫myclick方法,之后模擬運行:
2025.9.7?今天早晨又增加了一個點擊按鈕后在界面上顯示一串字符串的功能,感覺應該挺實用的的,以后肯定會用到,所以增加一點內容:先看效果:點擊哪個按鍵就在文本框中顯示哪個按鈕被點擊了。
下面展示一下布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".ButtonActivity"android:orientation="vertical"><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="30sp"android:text="按鈕1"android:id="@+id/btn1"android:textSize="36sp"android:textColor="#FF0000"android:onClick="myclick"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="30sp"android:text="按鈕2"android:id="@+id/btn2"android:textSize="36sp"android:textColor="#FF0000"android:onClick="myclick"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="30sp"android:text="按鈕3"android:id="@+id/btn3"android:textSize="36sp"android:textColor="#FF0000"android:onClick="myclick"/><TextViewandroid:id="@+id/text1"android:layout_width="match_parent"android:layout_height="wrap_content"android:textSize="36sp"android:textColor="#FF0000"android:layout_margin="30sp"android:background="#00FFFF"/></LinearLayout>
在展示一下ButtonActivity.java文件的代碼:
package com.example.android1;import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;public class ButtonActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);EdgeToEdge.enable(this);setContentView(R.layout.activity_button);ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);return insets;});}public void myclick(View a){int id = a.getId(); //獲得被點擊對象的IDTextView text = findViewById(R.id.text1); //獲得ID為text1的對象 為textif(id == R.id.btn1){Log.e("tag","按鈕1被點擊了");text.setText("按鈕1被點擊了"); //text對象設置文本}else if(id == R.id.btn2){Log.e("tag","按鈕2被點擊了");text.setText("按鈕2被點擊了"); //text對象設置文本}else if(id == R.id.btn3){Log.e("tag","按鈕3被點擊了");text.setText("按鈕3被點擊了"); //text對象設置文本}}
}
好了,磨磨蹭蹭的這篇文章寫了一上午了,到此告一段落吧!也許我寫的你覺得不好,不過沒關系我寫的是我學習的過程,是給我自己看的,覺得好呢?你就點個贊,不好呢?走就可以了,本人寫作能力只有幼兒園的水平,請勿噴!謝謝!