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的方法來監聽軟鍵盤按鍵。

private OnKeyListener onKeyListener = new OnKeyListener() {
         
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if(keyCode == KeyEvent.KEYCODE_ENTER){
                /*隱藏軟鍵盤*/
                InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                if(inputMethodManager.isActive()){
                    inputMethodManager.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
                }
                 
                edittext.setText("success");
                webview.loadUrl(URL);
                 
                return true;
            }
            return false;
        }
    };
edittext.setOnKeyListener(onKeyListener);

function 3:

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

edittext.setOnEditorActionListener(new TextView.OnEditorActionListener() {
             
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                /*判斷是否是“GO”鍵*/
                if(actionId == EditorInfo.IME_ACTION_GO){
                    /*隱藏軟鍵盤*/
                    InputMethodManager imm = (InputMethodManager) v
                            .getContext().getSystemService(
                                    Context.INPUT_METHOD_SERVICE);
                    if (imm.isActive()) {
                        imm.hideSoftInputFromWindow(
                                v.getApplicationWindowToken(), 0);
                    }
                     
                    edittext.setText("success");
                    webview.loadUrl(URL);
                     
                    return true;
                }
                return false;
            }
        });

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

軟鍵盤輸入法的按鍵並不是一成不變的,例如它的右下角的“確定”鍵,在有搜索框的時候就會變成帶搜索圖標的按鍵,在瀏覽器地址欄的時候則會變成“GO”鍵,我們在寫App的時候也可能根據情況的不同設置輸入法的“確定”鍵,改變方法就是給EditText控件的imeOptions屬性設置成不同的值(此時Enter鍵可以顯示不同的文字和圖案)。

<edittext android:id="@+id/edittext" android:layout_width="match_parent" android:layout_height="wrap_content" android:singleline="true" android:imeoptions="actionSearch"></edittext>

actionNone : 回車鍵,按下后光標到下一行
actionGo : Go,
actionSearch : 放大鏡
actionSend : Send
actionNext : Next
actionDone : Done,確定/完成,隱藏軟鍵盤,即使不是最后一個文本輸入框

題外話:

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

demo下載地址:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM