閱讀840 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Android App監聽軟鍵盤按鍵的三種方式

前言:


我們在android手機上麵有時候會遇到監聽手機軟鍵盤按鍵的時候,例如:我們在瀏覽器輸入url完畢後可以點擊軟鍵盤右下角的“GO”按鍵加載url頁麵;在點擊搜索框的時候,點擊右下角的search符號鍵可以進行搜索;或者在全部數據輸入完畢後,點擊右下角的"done"就馬上進行下一步操作。

效果圖:

















function 1:


重寫Activity的dispatchKeyEvent(KeyEvent event)方法,在其中監聽KeyEventKey.KEYCODE_ENTER鍵(右下角確定鍵),當此鍵按下的時候,隱藏輸入法軟鍵盤,設置edittext內容和加載webview內容。
@Override
	public boolean dispatchKeyEvent(KeyEvent event) {
		if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER){
			/*隱藏軟鍵盤*/
			InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
			if(inputMethodManager.isActive()){
				inputMethodManager.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), 0);
			}
			
			edittext.setText("success");
			webview.loadUrl(URL);
			return true;
		}
		return super.dispatchKeyEvent(event);
	}

function 2:


重寫dispatchKeyEvent(KeyEvent event)的方法感覺有點用牛刀的感覺,因為我們非常可能在這個方法中進行其他任務,所以我們可以使用OnKeyListener的方法來監聽軟鍵盤按鍵。
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. private OnKeyListener onKeyListener = new OnKeyListener() {  
  2.           
  3.         @Override  
  4.         public boolean onKey(View v, int keyCode, KeyEvent event) {  
  5.             if(keyCode == KeyEvent.KEYCODE_ENTER){  
  6.                 /*隱藏軟鍵盤*/  
  7.                 InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
  8.                 if(inputMethodManager.isActive()){  
  9.                     inputMethodManager.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);  
  10.                 }  
  11.                   
  12.                 edittext.setText("success");  
  13.                 webview.loadUrl(URL);  
  14.                   
  15.                 return true;  
  16.             }  
  17.             return false;  
  18.         }  
  19.     };  
[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. edittext.setOnKeyListener(onKeyListener);  

function 3:


第三種方法我認為可以幫助程序員更精確的判斷右下角按鍵情況,以便應對更加複雜的情況。它可以幫助程序員依據當前郵件下為“GO”,“done”,“search”鍵的情況下做出更細分的操作。

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. edittext.setOnEditorActionListener(new TextView.OnEditorActionListener() {  
  2.               
  3.             @Override  
  4.             public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {  
  5.                 /*判斷是否是“GO”鍵*/  
  6.                 if(actionId == EditorInfo.IME_ACTION_GO){  
  7.                     /*隱藏軟鍵盤*/  
  8.                     InputMethodManager imm = (InputMethodManager) v  
  9.                             .getContext().getSystemService(  
  10.                                     Context.INPUT_METHOD_SERVICE);  
  11.                     if (imm.isActive()) {  
  12.                         imm.hideSoftInputFromWindow(  
  13.                                 v.getApplicationWindowToken(), 0);  
  14.                     }  
  15.                       
  16.                     edittext.setText("success");  
  17.                     webview.loadUrl(URL);  
  18.                       
  19.                     return true;  
  20.                 }  
  21.                 return false;  
  22.             }  
  23.         });  

改變軟鍵盤右下角確定鍵樣式:


軟鍵盤輸入法的按鍵並不是一成不變的,例如它的右下角的“確定”鍵,在有搜索框的時候就會變成帶搜索圖標的按鍵,在瀏覽器地址欄的時候則會變成“GO”鍵,我們在寫App的時候也可能根據情況的不同設置輸入法的“確定”鍵,改變方法就是給EditText控件的imeOptions屬性設置成不同的值(此時Enter鍵可以顯示不同的文字和圖案)。
[html] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. <EditText  
  2.         android:id="@+id/edittext"  
  3.         android:layout_width="match_parent"  
  4.         android:layout_height="wrap_content"  
  5.         android:singleLine="true"  
  6.         android:imeOptions="actionSearch"/>  
actionNone : 回車鍵,按下後光標到下一行
actionGo : Go,
actionSearch : 放大鏡
actionSend : Send
actionNext : Next
actionDone : Done,確定/完成,隱藏軟鍵盤,即使不是最後一個文本輸入框

我在寫這個demo的時候,發現了webview的一個問題,就是直接使用webview.load(url)方法會在手機上麵彈出係統瀏覽器來訪問url鏈接,而不是我們設置的webview,我找到的解決辦法就是使用webview.setWebViewClient(....)的方法來確保url會在activity的webview上麵加載。


https://download.csdn.net/detail/zhufuing/6903671

最後更新:2017-04-03 12:55:00

  上一篇:go candence 16.6 win8.1 x64 破解成功
  下一篇:go Sql Server在建好的表中,新增一列