OnKeyListener接口簡介
OnKeyListener是對手機(jī)鍵盤進(jìn)行監(jiān)聽的接口,,通過對某個View注冊該監(jiān)聽,,當(dāng)View獲得焦點并有鍵盤事件時,,便會觸發(fā)該接口中的回調(diào)方法。該接口中的抽象方法簽名如下,。
Java代碼:
- public boolean onKey(View v, int keyCode, KeyEvent event)
復(fù)制代碼 參數(shù)v:參數(shù)v為事件的事件源控件,。 參數(shù)keyCode:參數(shù)keyCode為手機(jī)鍵盤的鍵盤碼。 參數(shù)event:參數(shù)event便為鍵盤事件封裝類的對象,,其中包含了事件的詳細(xì)信息,,例如發(fā)生的事件、事件的類型等,。 接下來同樣通過一個簡單的案例來介紹該接口的使用方法,,步驟如下。
效果圖:
準(zhǔn)備字符串資源,。同樣打開strings.xml文件,,用下列代碼替換其原有代碼。
Java代碼:
- <xml version="1.0" encoding="utf-8"?>
- <resources>
- <string name="textView">使用鍵盤中的ABCD鍵控制四個按鈕 string>
- <string name="app_name">Sample<string>
- <resources>
復(fù)制代碼 開發(fā)主邏輯代碼,,打開Sample.java文件,,用下列代碼替代其原有代碼。
Java代碼:
- package eoe.demo;
- //聲明所在包
- import android.app.Activity;
- //引入相關(guān)類
- //該處省略了部分包的引入代碼,,讀者可自行查閱隨書光盤中的源代碼
- import android.widget.TextView;
- //引入相關(guān)類
- public class Sample extends Activity implements OnKeyListener,OnClickListener{
- ImageButton[] imageButtons = new ImageButton[4];
- //聲明按鈕數(shù)組
- TextView myTextView;
- //聲明TextView的引用
- @Override
- public void onCreate(Bundle savedInstanceState) {
- //重寫的onCreate方法
- super.onCreate(savedInstanceState);
- this.setContentView(R.layout.main);
- //設(shè)置當(dāng)前顯示的用戶界面
- myTextView = (TextView) this.findViewById(R.id.myTextView);
- //得到myTextView的引用
- imageButtons[0] = (ImageButton)this.findViewById(R.id.button01);
- //得到button01的引用
- imageButtons[1] = (ImageButton) this.findViewById(R.id.button02);
- //得到button02的引用
- imageButtons[2] = (ImageButton)this.findViewById(R.id.button03);
- //得到button03的引用
- imageButtons[3] = (ImageButton)this.findViewById(R.id.button04);
- //得到button04的引用
- for(ImageButton imageButton : imageButtons){
- imageButton.setOnClickListener(this);
- //添加單擊監(jiān)聽
- imageButton.setOnKeyListener(this);
- //添加鍵盤監(jiān)聽
- }
- }
- @Override
- public void onClick(View v) {
- //實現(xiàn)了接口中的方法
- if(v.getId() == R.id.button01){
- //改變的是button01時
- myTextView.setText("您點擊了按鈕A,!");
- }
- else if(v.getId() == R.id.button02){
- //改變的是button02時
- myTextView.setText("您點擊了按鈕B");
- }
- else if(v.getId() == R.id.button03){
- //改變的是button03時
- myTextView.setText("您點擊了按鈕C");
- }
- else if(v.getId() == R.id.button04){
- //改變的是button04時
- myTextView.setText("您點擊了按鈕D");
- }
- else{
- //其他情況
- myTextView.setText("");
- }
- }
- @Override
- public boolean onKey(View v, int keyCode, KeyEvent event) {
- //鍵盤監(jiān)聽
- switch(keyCode){
- //判斷鍵盤碼
- case 29:
- //按鍵A
- imageButtons[0].performClick();
- //模擬單擊
- imageButtons[0].requestFocus();
- //嘗試使之獲得焦點
- break;
- case 30:
- //按鍵B
- imageButtons[1].performClick();
- //模擬單擊
- imageButtons[1].requestFocus();
- //嘗試使之獲得焦點
- break;
- case 31:
- //按鍵C
- imageButtons[2].performClick();
- //模擬單擊
- imageButtons[2].requestFocus();
- //嘗試使之獲得焦點
- break;
- case 32:
- //按鍵D
- imageButtons[3].performClick();
- //模擬單擊
- imageButtons[3].requestFocus();
- //嘗試使之獲得焦點
- break;
- }
- return false;
- }
- }
復(fù)制代碼 第6~7行聲明TextView的引用并創(chuàng)建按鈕數(shù)組。 第9~21行重寫了Activity的onCreate方法,,在該方法中先設(shè)置當(dāng)前的用戶界面,然后得到各個控件的引用并為各個控件添加監(jiān)聽,。 第22~35行實現(xiàn)了接口中的onClick方法,,在方法中,根據(jù)事件源的ID判斷是哪個按鈕被按下,,然后設(shè)置myTextView的文字,。 第36~57行實現(xiàn)了接口中的onKey方法,,在方法中,根據(jù)鍵盤碼的不同執(zhí)行不同的代碼,,當(dāng)A鍵被按下時,,模擬點擊一下按鈕0(第40行),在后嘗試使該按鈕獲得焦點(第41行),。其他按鍵被按下時處理方法相同,。
此時運行該案例,觀察效果如圖7-13所示,,當(dāng)點擊手機(jī)鍵盤上的A,、B、C,、D鍵時,,相當(dāng)于點擊ABCD按鈕。
效果圖:
|