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" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingTop="10dp"android:text="@string/user"android:textSize="20sp" /><EditTextandroid:id="@+id/usernameEt"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="@string/msg1"android:inputType="text"android:maxLength="6" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:paddingTop="10dp"android:text="@string/pwd"android:textSize="20sp" /><EditTextandroid:id="@+id/passwordEt"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="@string/msg2"android:inputType="numberPassword"android:maxLength="6" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><Buttonandroid:id="@+id/loginBt"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/login" /><Buttonandroid:id="@+id/resetBt"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/reset" /></LinearLayout><TextViewandroid: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;// 声明读取物理按键的文本视图@Overrideprotected 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() {@Overridepublic 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() {@Overridepublic void onClick(View arg0) {// 将输入用户名和输入密码的编辑框置空usernameEt.setText("");passwordEt.setText("");}});}// 当按下物理键盘松开时发生事件,所重写的方法,如果用户按下0-9和A-Z的物理键盘然后释放时把输入的内容显示到文本框上@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {// TODO Auto-generated method stubif (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 {@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_result);// 设置显示的布局文件TextView showUser = (TextView) findViewById(R.id.showUser);// 获取显示用户名的文本视图TextView showPwd = (TextView) findViewById(R.id.showPwd);// 获取显示用户名的文本视图Intent intent = getIntent();// 获得IntentString username = intent.getStringExtra("username");// 获得用户输入的用户名String pwd = intent.getStringExtra("password");// 获得用户输入的密码showUser.setText("用户名为:" + username);// 设置文本框内容showPwd.setText("密码为:" + pwd);// 设置文本框内容}// 当按下物理按键时,所重写的方法@Overridepublic 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);}//当长时间按下物理按键时,所重写的方法@Overridepublic 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" ><TextViewandroid:id="@+id/showUser"android:layout_width="match_parent"android:layout_height="wrap_content"/><TextViewandroid: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-sdkandroid:minSdkVersion="8"android:targetSdkVersion="19" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid: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><activityandroid: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,谢谢!



Android处理键盘事件的小例子相关推荐

  1. android获取键盘状态,Android获取屏幕方向及键盘状态的小例子

    Android获取屏幕方向及键盘状态的小例子 复制代码 代码如下: Configuration config = getResources().getConfiguration(); if (conf ...

  2. android 物理键盘 字符,Android物理键盘事件解析

    前言 Android设备连接物理键盘其实是个挺小众的需求,其实Android设备本身就是支持物理键盘,dispatchKeyEvent()这个方法就可以监听物理键盘,这里提供一个封装的类,解析键盘事件 ...

  3. Android开发短信备份小例子

    主要是使用内容提供者ContentProvider #1.在activity_main.xml布局文件中添加写sdcard权限,并添加读短信的权限 <RelativeLayout xmlns:a ...

  4. 一个Android获取mp3封面图片的小例子

    因为项目中涉及到获取mp3文件专辑封面,从网上找了一些资料,整理了一个demo. 挺简单的一种实现方式.记录一下. 步骤:首先获取手机中MP3文件路径, 然后调用 MediaMetadataRetri ...

  5. android accessibility 模拟键盘事件_H5 键盘兼容性小结

    在 H5 项目中,我们会经常遇到页面中存在单个甚至多个 input/textarea 输入框与底部固定元素的布局情况.在 input/textarea 输入框获取焦点时,会自动触发键盘弹起,而键盘弹出 ...

  6. Android事件处理之处理键盘事件

    1.在Android开发中,首先和用户交互的是界面,接着就是事件处理,对于如今的图形界面应用程序,都是通过事件来实现人机交互的.事件就是用户对图形界面的操作,在Android手机和平板电脑上,主要包括 ...

  7. Android电子牌外接USB读卡器读取内容模拟键盘事件

    最近做了一个Android外接USB读卡器刷手环读取数据,模拟键盘输入事件的项目; 借鉴了https://github.com/githubRonda/BarcodeScanner 连接电子牌板子调试 ...

  8. qt Android 按键事件,QT无窗口状态下对键盘事件的监听

    Question:最近在搞linux下的一个客户端项目,需要接收键盘事件,但是又不能有界面,这种情况怎么处理呢? int main(int argc, char *argv[]) { QApplica ...

  9. 第26章、OnKeyListener键盘事件(从零开始学Android)

    可以通过键盘事件对EMAIL进行验证(这是网上最多的例子),也可以加入关键字非法文字的过滤.如果要监听键盘事件,必须知道按下和松开两种不同的操作,在OnKeyEvent可以找到按下松开的键.我们这个案 ...

最新文章

  1. Linux系统备份树莓派,全平台备份树莓派的方法
  2. bzoj3959(LCT)
  3. 硬核,这个充电宝居然烧煤气!
  4. 异常:没有找到本地方法库,java.lang.UnsatisfiedLinkError: no trsbean in java.library.path
  5. 《数学分析》里的人生
  6. python watchdog的使用_python watchdog监控文件修改
  7. 面试时如何在众多Java工程师中脱颖而出
  8. Eureka Server 开启身份验证与客户端注册
  9. 凸优化第五章对偶 5.9广义不等式
  10. Python新闻网站项目-4.数据处理和算法应用
  11. html5模板md风格,使用CSS3 制作一个material-design 风格登录界面实例
  12. 淘宝天猫返利查券机器人搭建
  13. C-COT目标跟踪代码下载运行
  14. 阿里云服务器续费坑啊早知道不买了
  15. 【网络】华为网络设备认证登录设置
  16. PHP根据经纬度查询地理位置
  17. SVN服务端使用说明(二)
  18. 苹果cms手机模板好看的简洁手机端模板免费下载
  19. 联想LJ2400打印机 免换齿轮清零方法
  20. javafx学习教程

热门文章

  1. 获取spring里的bean
  2. 原因原来默认预检测会检测是否存在多选框
  3. 使用cocoapods导入第三方类库后 头文件没有代码提示?
  4. [UI] 精美UI界面欣赏[8]
  5. 备用小知识[不断更新***]
  6. 网易云api及 asrsea 加密参数文档
  7. 从事web前端两年半后的迷茫
  8. IE CSS Bug及解决方案参考手册
  9. JavaScript算法(实例七)空瓶子换汽水问题
  10. 7-174 两个有序链表序列的合并 (20 分)