安卓按键响应的方式

Posted Heavy sea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓按键响应的方式相关的知识,希望对你有一定的参考价值。

一、在xml中设置按键的onClick绑定的函数

在页面显示两个按钮,用onClick 绑定buttonBeClicked函数,该函数在MainActivity.java中实现。

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"
    tools:context=".MainActivity" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="buttonBeClicked"
        android:text="按键一" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/button1"
        android:layout_marginTop="81dp"
        android:onClick="buttonBeClicked"
        android:text="按键2" />

</RelativeLayout>

按键布局如下:
在这里插入图片描述

MainActivity.java:

Toast.makeText(this, “按键二被按下”, 0).show();

Toast的用法:通过静态方法makeText()创建出一个Toast对象,然后调用show()将Toast显示出来。
makeText()方法中有三个参数,第一个是Context,是Toast的上下文,可用getApplicationContext() 或 this 。第二个参数是Toast显示的内容。第三个参数是Toast显示的时长,Toast默认的有两个LENGTH_LONG(长)和LENGTH_SHORT(短),0 表示显示默认时长。

package com.example.heavysea.l;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Toast;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	// 按键按下调用
	public void buttonBeClicked(View v) {
		// System.out.println(v.getId());
		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;
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

最终的效果以弹框的形式在界面上浮动显示

二、实现按键监听事件的接口

安卓开发中的监听器:

关于监听器:监听器是一个存在于View类下的接口,一般以On…Llistener命名,实现该接口需要复写相应的on…(View v)方法(如onClick(View v))。

Android提供的基于事件监听接口有OnClickListener、OnLongClickListener、OnFocusChangeListener、OnKeyListener、OnTouchListener、OnCreateContextMenuListener等。

1)OnClickListener接口:该接口处理的是点击事件。在触摸模式下,是在某个View上按下并抬起的组合动作,而在键盘模式下,是某个View获得焦点后点击确定键或者按下轨迹球事件。
2)OnLongClickListener接口: OnLongClickListener接口与上述的OnClickListener接口原理基本相同,只是该接口为View长按事件的捕捉接口,即当长时间按下某个View时触发的事件。
3)OnFocusChangeListener接口:OnFocusChangeListener接口用来处理控件焦点发生改变的事件。如果注册了该接口,当某个控件失去焦点或者获得焦点时都会触发该接口中的回调方法。
4)OnKeyListener接口:是对手机键盘进行监听的接口,通过对某个View注册并监听,当View获得焦点并有键盘事件时,便会触发该接口中的回调方法。
5)OnTouchListener接口:是用来处理手机屏幕事件的监听接口,当为View的范围内触摸按下、抬起或滑动等动作时都会触发该事件。
6)OnCreateContextMenuListener接口:是用来处理上下文菜单显示事件的监听接口。该方法是定义和注册上下文菜单的另一种方式。

以下功能及代码实现以OnClickListener接口为例

1.在Activity中定义一个内部类继承监听器接口

1.绑定局部变量button和xml中的button
btn1 = (Button) findViewById(R.id.button1);
btn2 = (Button) findViewById(R.id.button2);
2.实现接口类,在类中实现onclicked方法,写业务代码

class MyListener implements View.OnClickListener{
        @Override
        public void onClick(View v) {
        
                                }
}

3.为1,2两部做的准备进行绑定。使得按键被按下后执行你写的业务代码
btn1.setOnClickListener(new MyListener());
btn2.setOnClickListener(new MyListener());

具体代码:
MainActivity.java:

package com.example.heavysea.l;

import com.example.heavysea.l.R.id;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

class MyclickHandler implements View.OnClickListener {

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.button1:
			System.out.println("按键一");
			break;
		case R.id.button2:
			System.out.println("按键二");
			break;
		}
	}

}

public class MainActivity extends Activity {
	
	Button btn1;
	Button btn2;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		btn1 = (Button) findViewById(R.id.button1);
		btn2 = (Button) findViewById(R.id.button2);
		
		btn1.setOnClickListener(new MyclickHandler());
		btn2.setOnClickListener(new MyclickHandler());
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

2.实现匿名内部类

这种方法适合只希望对监听器进行一次性使用的情况,在该代码块运行完毕之后,该监听器也就不复存在了。

MainActivity.java:

package com.example.heavysea.l;

import com.example.heavysea.l.R.id;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
	
	Button btn1;
	Button btn2;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		btn1 = (Button) findViewById(R.id.button1);
		btn2 = (Button) findViewById(R.id.button2);
		
		//直接new一个接口  实现匿名内部类
		btn1.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				System.out.println("按键一被按下");
				Toast.makeText(MainActivity.this, "按键一被按下", 0).show();
			}
		});
		
		btn2.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				System.out.println("按键二被按下");
				Toast.makeText(MainActivity.this, "按键二被按下", 0).show();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

3.Activity实现onclick 接口

package com.example.heavysea.l;

import com.example.heavysea.l.R.id;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{
	
	Button btn1;
	Button btn2;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		btn1 = (Button) findViewById(R.id.button1);
		btn2 = (Button) findViewById(R.id.button2);
		
		// 给按键设置监听功能
		btn1.setOnClickListener(this);
		btn2.setOnClickListener(this);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		switch (v.getId()) {
		case R.id.button1:
			System.out.println("按键一");
			break;
		case R.id.button2:
			System.out.println("按键二");
			break;
		}
	}

	}

以上是关于安卓按键响应的方式的主要内容,如果未能解决你的问题,请参考以下文章

html 将以编程方式附加外部脚本文件的javascript代码片段,并按顺序排列。用于响应式网站,其中ma

求修改安卓按键功能的教程

安卓讲课笔记4.1 安卓按键事件

安卓应用怎么设置全屏?

安卓按键精灵脚本。求大神制作一个安卓按键精灵点击屏幕的脚本。就是触摸一个位置后自动重复点击屏幕那个

实体按键不行了。如何让安卓手机(Android 4.2.1)显示虚拟按键?已经ROOT.