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,谢谢!