Android代码规范----按钮单击事件的四种写法

简介:

【前言】

按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类。

按钮多的时候一般选择第四种写法。

 

一、第一种写法:在XML文件中指定(很少用)

在XML文件中显式指定控件的onClick属性,点击按钮时会利用反射的方式调用对应Activity中的onClick()方法。

(1)xml文件代码如下:

复制代码
 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <Button
 8         android:id="@+id/btn1"
 9         android:layout_width="wrap_content"
10         android:layout_height="wrap_content"
11         android:onClick="onClick"
12         android:text="按钮1" />
13 
14     <Button
15         android:id="@+id/btn2"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:onClick="onClick"
19         android:text="按钮2" />
20 
21 </LinearLayout>
复制代码

上面的代码中,我们在第11行、18行指定了onClick属性,然后接下来在Activity中写一个onClick同名方法。

(2)MainActivity.java:

复制代码
 1 package com.vae01;
 2 
 3 import android.app.Activity;
 4 import android.content.DialogInterface.OnClickListener;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.widget.Button;
 8 import android.widget.ImageView;
 9 import android.widget.TextView;
10 import android.widget.Toast;
11 
12 public class MainActivity extends Activity {
13 
14     private Button btn1, btn2;
15 
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20         initView();
21     }
22 
23     // 方法:初始化View
24     private void initView() {
25         btn1 = (Button) findViewById(R.id.btn1);
26         btn2 = (Button) findViewById(R.id.btn2);
27     }
28 
29     //方法:控件View的点击事件
30     public void onClick(View v) {
31         switch (v.getId()) {
32         case R.id.btn1:
33             Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
34             break;
35         case R.id.btn2:
36             Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
37             break;        
38             
39         default:
40             break;
41         }
42     }
43 }
复制代码

注意,第30行的onClick()方法的权限是public,毕竟xml文件还要访问的嘛。

 

二、第二种写法:自定义单击事件监听类(很少用)

(1)xml文件:

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

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮1" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮2" />

</LinearLayout>
复制代码

(2)MainActivity.java:

复制代码
 1 package com.vae01;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.view.View.OnClickListener;
 7 import android.widget.Button;
 8 import android.widget.ImageView;
 9 import android.widget.TextView;
10 import android.widget.Toast;
11 
12 public class MainActivity extends Activity {
13 
14     private Button btn1, btn2;
15 
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20         initView();
21     }
22 
23     // 方法:初始化View
24     private void initView() {
25         btn1 = (Button) findViewById(R.id.btn1);
26         btn2 = (Button) findViewById(R.id.btn2);
27         
28         btn1.setOnClickListener(new MyClickListener());
29         btn2.setOnClickListener(new MyClickListener());
30     }
31 
32     class MyClickListener implements OnClickListener {
33         @Override
34         public void onClick(View v) {
35             switch (v.getId()) {
36             case R.id.btn1:
37                 Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
38                 break;
39             case R.id.btn2:
40                 Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
41                 break;
42             default:
43                 break;
44             }
45         }
46     }
47 } 
复制代码

注意第28、29行:不要忘记了绑定监听器。

 

三、第三种写法:匿名内部类(适合场景:测试、或者只有单个button的时候

(1)xml文件:

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

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮1" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮2" />

</LinearLayout>
复制代码

(2)MainActivity.java:

复制代码
 1 package com.vae01;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.view.View.OnClickListener;
 7 import android.widget.Button;
 8 import android.widget.Toast;
 9 
10 public class MainActivity extends Activity {
11 
12     private Button btn1, btn2;
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_main);
18         initView();
19     }
20 
21     // 方法:初始化View
22     private void initView() {
23         btn1 = (Button) findViewById(R.id.btn1);
24         btn2 = (Button) findViewById(R.id.btn2);
25         
26         btn1.setOnClickListener(new OnClickListener(){
27             @Override
28             public void onClick(View v) {
29                 Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
30             }
31             
32         });
33         
34         btn2.setOnClickListener(new OnClickListener(){
35             @Override
36             public void onClick(View v) {
37                 Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
38             }
39             
40         });
41     }
42 }
复制代码

 

四、第四种写法:Activity继承View.OnClickListener(最常用)

Activity继承View.OnClickListener,由Activity实现OnClick(View view)方法,在OnClick(View view)方法中用switch-case对不同id代表的button进行相应的处理

(1)xml代码:

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

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮1" />

    <Button
        android:id="@+id/btn2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="按钮2" />

</LinearLayout>
复制代码

(2)MainActivity.java:

复制代码
 1 package com.vae01;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.view.View;
 6 import android.view.View.OnClickListener;
 7 import android.widget.Button;
 8 import android.widget.Toast;
 9 
10 public class MainActivity extends Activity implements OnClickListener{
11 
12     private Button btn1, btn2;
13 
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_main);
18         //初始化View
19         initView();
20     }
21 
22     // 方法:初始化View
23     private void initView() {
24         btn1 = (Button) findViewById(R.id.btn1);
25         btn2 = (Button) findViewById(R.id.btn2);    
26         
27         //按钮绑定点击事件的监听器
28          btn1.setOnClickListener(this);
29          btn2.setOnClickListener(this);
30     }
31 
32     //方法:按钮的单击事件
33     @Override
34     public void onClick(View v) {
35         switch (v.getId()) {
36         case R.id.btn1:
37             Toast.makeText(MainActivity.this, "btn1", Toast.LENGTH_SHORT).show();
38             break;
39         case R.id.btn2:
40             Toast.makeText(MainActivity.this, "btn2", Toast.LENGTH_SHORT).show();
41             break;
42         default:
43             break;
44         }            
45     }
46 }
复制代码

 

 

相关文章
|
4月前
|
Java Android开发
Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
161 0
|
4月前
|
Android开发
Android Studio入门之图像显示解析及实战(附源码 超详细必看)(包括图像视图、图像按钮、同时展示文本与图像)
Android Studio入门之图像显示解析及实战(附源码 超详细必看)(包括图像视图、图像按钮、同时展示文本与图像)
66 1
|
4月前
|
XML Java Android开发
Android Studio App开发之实现底部标签栏BottomNavigationView和自定义标签按钮实战(附源码 超详细必看)
Android Studio App开发之实现底部标签栏BottomNavigationView和自定义标签按钮实战(附源码 超详细必看)
71 0
|
17天前
|
XML Java Android开发
Android每点击一次按钮就添加一条数据
Android每点击一次按钮就添加一条数据
21 1
|
8月前
|
Android开发
Android中保存当前按钮的状态 按back键返回之后再次进入没有改变
Android中保存当前按钮的状态 按back键返回之后再次进入没有改变
45 0
|
4月前
|
Android开发 iOS开发 容器
Android Studio App开发入门之选择按钮的讲解及使用(包括复选框,开关按钮,单选按钮,附源码)
Android Studio App开发入门之选择按钮的讲解及使用(包括复选框,开关按钮,单选按钮,附源码)
65 0
|
8月前
|
Android开发
#5,Android Studio Android 按钮 button
#5,Android Studio Android 按钮 button
|
8月前
|
Android开发
Android 按钮实现按压水波纹效果
Android 按钮实现按压水波纹效果
196 0
Android 按钮实现按压水波纹效果
|
8月前
|
Android开发
Android studio中的调试(Debug)按钮具体用法
Android studio中的调试(Debug)按钮具体用法
116 0
|
8月前
|
Android开发
Android 中CheckBox复选框按钮的基本用法
Android 中CheckBox复选框按钮的基本用法
92 0
Android 中CheckBox复选框按钮的基本用法