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