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 }
复制代码

 

 

相关文章
|
12天前
|
存储 消息中间件 人工智能
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
【03】AI辅助编程完整的安卓二次商业实战-本地构建运行并且调试-二次开发改注册登陆按钮颜色以及整体资源结构熟悉-优雅草伊凡
42 3
|
12天前
|
存储 消息中间件 人工智能
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
44 11
【05】AI辅助编程完整的安卓二次商业实战-消息页面媒体对象(Media Object)布局实战调整-按钮样式调整实践-优雅草伊凡
|
11月前
|
Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
11月前
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
Android面试高频知识点(1) 图解 Android 事件分发机制
140 1
|
11月前
|
Android开发
Android 事件分发机制详细解读
Android 事件分发机制详细解读
185 5
|
11月前
|
XML 前端开发 Android开发
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
Android面试高频知识点(1) 图解Android事件分发机制
|
Android开发
Android面试高频知识点(1) 图解 Android 事件分发机制
在Android开发中,事件分发机制是一块Android比较重要的知识体系,了解并熟悉整套的分发机制有助于更好的分析各种点击滑动失效问题,更好去扩展控件的事件功能和开发自定义控件,同时事件分发机制也是Android面试必问考点之一,如果你能把下面的一些事件分发图当场画出来肯定加分不少。废话不多说,总结一句:事件分发机制很重要。
372 9
|
图形学 Android开发
小功能⭐️Unity调用Android常用事件
小功能⭐️Unity调用Android常用事件
|
开发工具 Android开发
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
Android项目架构设计问题之组件A通知组件B某个事件的发生如何解决
94 0
|
Android开发
3种方法实现Android按钮的点击事件,建议收藏!
3种方法实现Android按钮的点击事件,建议收藏!
846 0
3种方法实现Android按钮的点击事件,建议收藏!

热门文章

最新文章