安卓按键响应
按键响应
- 一、onClick
- 二、自定义类实现按键监听事件接口
- 三、匿名内部类
- 四、实现接口View.OnClickListener
一、onClick
在按键中加入属性onClick,填入要绑定到的方法"bu1"中,因为有两个按键,所以为了区分都添加上id,
注意:每个id的加入都要防止属性的最前面
在MainActivity.java中我们来定义bu1方法,如下图,按键按下,得到id开始进行分支选择,Toast.makeText中的参数分别是,(调用的对象,要打印的内容,时长(填0为默认)),最后要调用show方法。
运行结果
二、自定义类实现按键监听事件接口
自定义一个类,实现View.OnClickListener接口,实现方法onClick,在这里makeText就用不了了,因为它必须和MainActivity产生一些关系
MainActivity.java
package com.example.sct.anjian2;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
class Myonclilk implements View.OnClickListener{ //自定义的一个类@Overridepublic void onClick(View v) {// TODO 自动生成的方法存根switch (v.getId()) {case R.id.button1:System.out.println("按键一被按下");
// Toast.makeText(this, "按键一被按下", 0).show();break;case R.id.button2:System.out.println("按键二被按下");
// Toast.makeText(this, "按键二被按下", 0).show();break;}}
}
public class MainActivity extends Activity {Button bu1; //定义局部变量不bu1和bu2Button bu2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bu1=(Button)findViewById(R.id.button1);//把xml文件中的控件与//局部变量bu1产生关系,//并强转为Button类型bu2=(Button)findViewById(R.id.button2);bu1.setOnClickListener(new Myonclilk()); //给bu1设置按键监听,bu2.setOnClickListener(new Myonclilk());}
}
activity_main.xml
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.sct.anjian2.MainActivity" ><Button android:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按键1"/><Button android:id="@+id/button2"android:layout_centerHorizontal="true"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="按键2"/>
</RelativeLayout>
三、匿名内部类
package com.example.sct.anjian2;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity {Button bu1;Button bu2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); bu1=(Button)findViewById(R.id.button1);bu2=(Button)findViewById(R.id.button2);bu1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO 自动生成的方法存根Toast.makeText(MainActivity.this, "按键一被按下", 0).show(); }}); bu2.setOnClickListener(new View.OnClickListener() { @Overridepublic void onClick(View v) {// TODO 自动生成的方法存根Toast.makeText(MainActivity.this, "按键二被按下", 0).show();}});}
}
可以看到,使用匿名内部类我们就不用像方法二一样自定义一个监听类了
四、实现接口View.OnClickListener
package com.example.sct.anjian2;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends Activity implements View.OnClickListener{Button bu1;Button bu2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bu1=(Button)findViewById(R.id.button1);bu2=(Button)findViewById(R.id.button2);bu1.setOnClickListener(this);bu2.setOnClickListener(this);}@Overridepublic void onClick(View v) {//实现其中的方法switch (v.getId()) {case R.id.button1:System.out.println("按键一被按下");Toast.makeText(this, "按键一被按下", 0).show();break;case R.id.button2:System.out.println("按键二被按下");Toast.makeText(this, "按键二被按下", 0).show();break;}}
}