> 文章列表 > 安卓按键响应

安卓按键响应

安卓按键响应

按键响应

  • 一、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;}}
}