您的位置:首页 > 移动开发 > Android开发

Android处理键盘事件的小例子

2015-02-19 23:35 417 查看
1.昨天介绍了Android开发中处理键盘事件的一些知识,今天我将附上一个例子,这个例子说复杂也好,说不复杂也好,我尽量长话短说。

2.首先,创建一个安卓项目,项目名为KeyEventTest,新建完成之后,打开activity_main.xml布局文件,开始对界面进行布局,首先,附上strings.xml文件的代码,再附上activity_main.xml文件的代码:

strings.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">KeyEventTest</string>
    <string name="hello_world">Hello world!</string>
    <string name="action_settings">Settings</string>
	<string name="user">用户名:</string>
	<string name="pwd">密码:</string>
	<string name="msg1">请输入用户名 ,最大长度为6</string>
	<string name="msg2">密码只限数字0~9并只能输入6个数字</string>
	<string name="login">登录</string>
	<string name="reset">重置</string>
</resources>

activity_main.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" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="10dp"
        android:text="@string/user"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/usernameEt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/msg1"
        android:inputType="text"
        android:maxLength="6" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="10dp"
        android:text="@string/pwd"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/passwordEt"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/msg2"
        android:inputType="numberPassword"
        android:maxLength="6" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/loginBt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/login" />

        <Button
            android:id="@+id/resetBt"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/reset" />
    </LinearLayout>

    <TextView
        android:id="@+id/readKeyTv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>




界面如上图所示。

3.接着打开MainActivity.java文件,当用户输入用户名和密码,按下物理按键后松开,如果是0-9和A-Z的话会显示在下方的文本视图中,输入用户名和密码后点击登录按钮跳转到ShowResultActivity这个Activity,这个Activity的布局文件为activity_result.xml,这两个文件是要我们自己创建的,这里先附上MainActivity.java文件的代码,再依次附上ShowResultActivity.java文件和activity_result.xml文件的代码:

Mainactivity.java:

package tom.keyeventtest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

	private Button loginBt, resetBt;// 声明两个按钮
	private EditText usernameEt, passwordEt;// 声明两个编辑框
	private TextView readKeyTv;// 声明读取物理按键的文本视图

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);// 设置显示的布局文件
		loginBt = (Button) findViewById(R.id.loginBt);// 获取登录按钮
		resetBt = (Button) findViewById(R.id.resetBt);// 获取重置按钮
		usernameEt = (EditText) findViewById(R.id.usernameEt);// 获取输入用户名的编辑框
		passwordEt = (EditText) findViewById(R.id.passwordEt);// 获取输入密码的编辑框
		readKeyTv = (TextView) findViewById(R.id.readKeyTv);// 获取读取物理键盘的文本视图

		// 为登录按钮添加单击事件处理监听器
		loginBt.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// 用户名和密码同时不为空时跳转
				if (usernameEt.getText() != null
						&& passwordEt.getText() != null) {
					Intent intent = new Intent();// 实例化Intent对象
					intent.putExtra("username", usernameEt.getText().toString());//封装输入的用户名信息
					intent.putExtra("password", passwordEt.getText().toString());//封装输入的密码信息
					intent.setClass(MainActivity.this, ShowResultActivity.class);//指定传递对象
					startActivity(intent);// 点击登录按钮跳转到showResultActivity去
				}
			}
		});

		// 为重置按钮添加单击事件处理监听器
		resetBt.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				// 将输入用户名和输入密码的编辑框置空
				usernameEt.setText("");
				passwordEt.setText("");
			}
		});

	}

	// 当按下物理键盘松开时发生事件,所重写的方法,如果用户按下0-9和A-Z的物理键盘然后释放时把输入的内容显示到文本框上
	@Override
	public boolean onKeyUp(int keyCode, KeyEvent event) {
		// TODO Auto-generated method stub
		if (keyCode == KeyEvent.KEYCODE_0) {
			readKeyTv.setText("0");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_1) {
			readKeyTv.setText("1");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_2) {
			readKeyTv.setText("2");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_3) {
			readKeyTv.setText("3");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_4) {
			readKeyTv.setText("4");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_5) {
			readKeyTv.setText("5");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_6) {
			readKeyTv.setText("6");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_7) {
			readKeyTv.setText("7");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_8) {
			readKeyTv.setText("8");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_9) {
			readKeyTv.setText("9");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_A) {
			readKeyTv.setText("A");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_B) {
			readKeyTv.setText("B");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_C) {
			readKeyTv.setText("C");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_D) {
			readKeyTv.setText("D");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_E) {
			readKeyTv.setText("E");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_F) {
			readKeyTv.setText("F");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_G) {
			readKeyTv.setText("G");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_H) {
			readKeyTv.setText("H");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_I) {
			readKeyTv.setText("I");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_J) {
			readKeyTv.setText("J");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_K) {
			readKeyTv.setText("K");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_L) {
			readKeyTv.setText("L");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_M) {
			readKeyTv.setText("M");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_N) {
			readKeyTv.setText("N");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_O) {
			readKeyTv.setText("O");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_P) {
			readKeyTv.setText("P");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_Q) {
			readKeyTv.setText("Q");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_R) {
			readKeyTv.setText("R");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_S) {
			readKeyTv.setText("S");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_T) {
			readKeyTv.setText("T");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_U) {
			readKeyTv.setText("U");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_V) {
			readKeyTv.setText("V");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_W) {
			readKeyTv.setText("W");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_X) {
			readKeyTv.setText("X");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_Y) {
			readKeyTv.setText("Y");
			return false;
		}
		if (keyCode == KeyEvent.KEYCODE_Z) {
			readKeyTv.setText("Z");
			return false;
		}
		return super.onKeyUp(keyCode, event);
	}

}


ShowResultActivity.java:

package tom.keyeventtest;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.TextView;
import android.widget.Toast;

public class ShowResultActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_result);// 设置显示的布局文件
		TextView showUser = (TextView) findViewById(R.id.showUser);// 获取显示用户名的文本视图
		TextView showPwd = (TextView) findViewById(R.id.showPwd);// 获取显示用户名的文本视图
		Intent intent = getIntent();// 获得Intent
		String username = intent.getStringExtra("username");// 获得用户输入的用户名
		String pwd = intent.getStringExtra("password");// 获得用户输入的密码
		showUser.setText("用户名为:" + username);// 设置文本框内容
		showPwd.setText("密码为:" + pwd);// 设置文本框内容
	}

	// 当按下物理按键时,所重写的方法
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode == KeyEvent.KEYCODE_BACK) {
			return true; // 屏蔽后退键
		}
		if(keyCode==KeyEvent.KEYCODE_VOLUME_UP){
			Toast.makeText(ShowResultActivity.this, "音量增加", Toast.LENGTH_SHORT).show();//点击物理按键的增加音量,音量增加时弹出消息
			return false;
		}
		if(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN){
			Toast.makeText(ShowResultActivity.this, "音量减少", Toast.LENGTH_SHORT).show();//点击物理按键的减少音量,音量减少时弹出消息
			return false;
		}
		//当按下物理键盘的菜单项时,返回HOME界面
		if (keyCode == KeyEvent.KEYCODE_MENU) {
			Intent intent = new Intent();// 创建Intent对象
			intent.setAction(Intent.ACTION_MAIN);// 设置Intent动作
			intent.addCategory(Intent.CATEGORY_HOME);// 设置Intent种类
			startActivity(intent);// 将Activity传递给Activity
		}
		return super.onKeyDown(keyCode, event);
	}

	
	//当长时间按下物理按键时,所重写的方法
	@Override
	public boolean onKeyLongPress(int keyCode, KeyEvent event) {
		//长时间按住搜索键时弹出消息
		if(keyCode==KeyEvent.KEYCODE_SEARCH){
			Toast.makeText(ShowResultActivity.this, "搜索键被长时间按住,请松开", Toast.LENGTH_SHORT).show();
			return false;
		}
		return super.onKeyLongPress(keyCode, event);
	}
}

activity_result.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/showUser"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/showPwd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>


4.因为我们新建了一个Activity,所以我们必须在AndroidManifest.xml配置文件中添加多一个Activity,接下来附上AndroidManifest.xml文件的代码:

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="tom.keyeventtest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="tom.keyeventtest.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="tom.keyeventtest.ShowResultActivity"/>
    </application>

</manifest>


5.这样项目就写好了,运行此项目(接下来的全是图了):



输入用户名和密码时,每输一个TextView文本框就显示一个,显示一个后在点另一个键盘上的0-9或者A-Z会显示另外一个,不会累加的,如下图所示:





点击重置按钮,编辑框清空,点击登录按钮,跳转到另一界面,如下图所示:



显示出了用户名和密码的信息,然后点击物理键盘的后退键,发现怎么点都回不到上一个界面,返回主页后重新打开还是显示上图这个界面,如果按下MENU,即菜单键,会返回到HOME界面(这样是不是挺好玩的),长按搜索键的话,会出现下图的情况:



按下音量增加键和音量减少键,会出现下图的情况:





6.为了供大家学习,我将附上源代码地址,亲,不用积分的哦,希望对你们有用:http://download.csdn.net/detail/u012561176/8451883

7.以上就是全部内容,仅供大家学习参考,写得不好请见谅,如有错误请指出,若要转载,请注明出处http://blog.csdn.net/u012561176,谢谢!


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: