Android----按钮单击事件的四种写法
2016-12-16 22:26
309 查看
【前言】
按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类。
按钮多的时候一般选择第四种写法。
一、第一种写法:在XML文件中声明onClick属性(很少用)
在XML文件中显式指定控件的onClick属性,点击按钮时会利用反射的方式调用对应Activity中的onClick()方法。
(1)xml文件代码如下:
上面的代码中,我们在第11行、18行指定了onClick属性,然后接下来在Activity中写一个onClick同名方法。
(2)MainActivity.java:
注意,第30行的onClick()方法的权限是public,毕竟xml文件还要访问的嘛。
二、第二种写法:使用内部类(很少用)
(1)xml文件:
(2)MainActivity.java:
注意第28、29行:不要忘记了绑定监听器。
三、第三种写法:匿名内部类(适合场景:测试、或者只有单个button的时候。使用较多)
(1)xml文件:
(2)MainActivity.java:
四、第四种写法:Activity实现View.OnClickListener接口(最常用)
Activity继承View.OnClickListener,由Activity实现OnClick(View view)方法,在OnClick(View view)方法中用switch-case对不同id代表的button进行相应的处理
(1)xml代码:
(2)MainActivity.java:
通过Eclipse可以在自己的应用程序中增加一个按钮,同时在main.xml中会自动增加如下的代码:
---
[html] view
plain copy
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
编译运行程序时,将会看到一个按钮。单击它时,没有任何的响应和动作。
需要我们手动增加代码为该按钮增加单击事件的响应。
为按钮增加单击事件的响应时有两种方式:
1、通过Button的setOnClickListener方法为该按钮绑定一个单击事件监听器,用于监听用户的单击事件。代码如下:
[java] view
plain copy
public class MyActivity extends Activity {
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.content_layout_id);
//手工增加代码开始
//将按钮绑定一个单操作的事件监听器。用于监听用户的单击操作。
final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
//增加自己的代码......
final TextView text = (TextView) findViewById(R.id.textView1);
text.setText("OnClick. " + " ....");
}
});
//手工增加代码结束
}
}
上面的代码很简短,但不利于阅读。也可以使用下面的书写方式:
[java] view
plain copy
public class MyActivity extends Activity {
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.content_layout_id);
//手动增加代码开始
Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(myOnClickListener);
//手动增加代码结束
}
//手动增加代码开始
private OnClickListener myOnClickListener = new OnClickListener() {
public void onClick(View v) {
//增加自己的代码......
final TextView text = (TextView) findViewById(R.id.textView1);
text.setText("OnClick. " + " ....");
}
};
//手动增加代码结束
}
2、通过修改main.xml中Button的属性,为按钮增加单击事件请求。修改的xml文件如下:
[html] view
plain copy
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="OnMySelfClick"
android:text="Button" />
然后在.java文件中增加xml文件中提到的OnMySelfClick函数:
[java] view
plain copy
public class HelloAndroidActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/* ************************************
* 按钮的单击操作处理函数。
* 下面的函数是一个按钮单击的处理函数。
* 它需要在layout的xml中将按钮增加一个OnClick的属性,
* 并指定它的处理函数。如下
*
* android:onClick="OnMySelfClick"
*
* 这样的话,就不用再增加上面那些复杂的代码了。
*
* */
public void OnMySelfClick(View v)
{
final TextView text = (TextView) findViewById(R.id.textView1);
text.setText("OnMySelfClick. " + " ....");
}
}
第二种方法比较第一种方法简单了许多。
按钮少的时候用第三种的匿名内部类会比较快,比如写demo测试的时候或者登陆界面之类。
按钮多的时候一般选择第四种写法。
一、第一种写法:在XML文件中声明onClick属性(很少用)
在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 }
通过Eclipse可以在自己的应用程序中增加一个按钮,同时在main.xml中会自动增加如下的代码:
---
[html] view
plain copy
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
编译运行程序时,将会看到一个按钮。单击它时,没有任何的响应和动作。
需要我们手动增加代码为该按钮增加单击事件的响应。
为按钮增加单击事件的响应时有两种方式:
1、通过Button的setOnClickListener方法为该按钮绑定一个单击事件监听器,用于监听用户的单击事件。代码如下:
[java] view
plain copy
public class MyActivity extends Activity {
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.content_layout_id);
//手工增加代码开始
//将按钮绑定一个单操作的事件监听器。用于监听用户的单击操作。
final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
//增加自己的代码......
final TextView text = (TextView) findViewById(R.id.textView1);
text.setText("OnClick. " + " ....");
}
});
//手工增加代码结束
}
}
上面的代码很简短,但不利于阅读。也可以使用下面的书写方式:
[java] view
plain copy
public class MyActivity extends Activity {
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.content_layout_id);
//手动增加代码开始
Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(myOnClickListener);
//手动增加代码结束
}
//手动增加代码开始
private OnClickListener myOnClickListener = new OnClickListener() {
public void onClick(View v) {
//增加自己的代码......
final TextView text = (TextView) findViewById(R.id.textView1);
text.setText("OnClick. " + " ....");
}
};
//手动增加代码结束
}
2、通过修改main.xml中Button的属性,为按钮增加单击事件请求。修改的xml文件如下:
[html] view
plain copy
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="OnMySelfClick"
android:text="Button" />
然后在.java文件中增加xml文件中提到的OnMySelfClick函数:
[java] view
plain copy
public class HelloAndroidActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
/* ************************************
* 按钮的单击操作处理函数。
* 下面的函数是一个按钮单击的处理函数。
* 它需要在layout的xml中将按钮增加一个OnClick的属性,
* 并指定它的处理函数。如下
*
* android:onClick="OnMySelfClick"
*
* 这样的话,就不用再增加上面那些复杂的代码了。
*
* */
public void OnMySelfClick(View v)
{
final TextView text = (TextView) findViewById(R.id.textView1);
text.setText("OnMySelfClick. " + " ....");
}
}
第二种方法比较第一种方法简单了许多。
相关文章推荐
- 你真的了解View的坐标吗?
- android studio讯飞语音识别接口使用
- win7本地电脑上搭建OpenGrok环境看android源代码记录
- Android中的沉浸式状态栏效果
- 《Android群英传》---读书笔记9
- 记录下android studio 重命名包名
- Android Studio 快捷键
- android 原生camera——设置模块修改
- 智慧北京[下篇]
- android 原生camera——设置模块修改
- Android API翻译之WebChromeClient(未完工)
- Android Studio集成Lombok Plugin
- 理解Android JNI
- NotificationButton
- Android数据存储之SharedPreferences
- Android Support Design 库 之 Snackbar使用及源码分析
- Android 关于getViewTreeObserver()
- Android6.0获取运行时权限
- Android属性动画(PropertyAnimation)
- Android重温-SharedPreferences的简单实现-存储-读取