1. 程式人生 > >Android 更改軟鍵盤右下角按鍵的樣式以及監聽此鍵的方法

Android 更改軟鍵盤右下角按鍵的樣式以及監聽此鍵的方法

一、我們在開發Android App時有時候會遇到更改軟鍵盤右下角按鍵的樣式

  • 我們可以隨自己的需求更改軟鍵盤右下角的顯示樣式,例如:搜尋,下一步,Q(搜尋圖示)
    具體對應:
    1. actionNone : 按下後游標到下一行(回車)
    2. actionGo : 按下後搜尋(Go)
    3. actionSearch : 放大鏡
    4. actionSend : Send 按下後傳送
    5. actionNext : Next 下一步
    6. actionDone : Done,確定/完成,隱藏軟鍵盤(包括不是最後一個文字輸入框的情況也會隱藏)
      使用方法:
      在xml裡面寫佈局時直接加給EditTxt的imeOptions屬性,例如:
<EditText  
        android:id="@+id/et"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content"  
        android:imeOptions="actionSearch"/>
注:此時會發現並比起作用,這是因為少設定一個引數,既新增屬性 android:singleLine="true"(因為預設是多行模式,而右下角的按鍵是用於換行的,當設定為單行模式後就沒必要換行了)

二、我們在開發Android App時有時候還會遇到監聽軟鍵盤右下角按鍵的需求

例如我們在EditText裡面輸入內容後可以點選軟鍵盤右下角的“搜尋”按鍵進行搜尋,或者在輸入完畢後,點選右下角的"done"就馬上進行下一步操作(例如將內容上傳到伺服器)。

下面列舉幾個方法:

  • 重寫Activity的dispatchKeyEvent(KeyEvent event)方法,在其中監聽KeyEventKey.KEYCODE_ENTER鍵(右下角確定鍵),當此鍵按下的時候,隱藏輸入法軟鍵盤,將EditText內容上傳到伺服器
    例如:
    @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); } // 上傳程式碼 return true; } return super.dispatchKeyEvent(event); }
  • 重寫dispatchKeyEvent(KeyEvent event),這種方法,因為我們可能在這個方法中進行其他任務,所以我們可以使用OnKeyListener的方法來監聽軟鍵盤按鍵。
et.setOnKeyListener(onKeyListener);  


  private OnKeyListener onKeyListener = new OnKeyListener() {  

          @Override  
          public boolean onKey(View v, int keyCode, KeyEvent event) {  
              if(keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN){  
                  //隱藏軟鍵盤  
                  InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
                  if(imm.isActive()){  
                      imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);  
                  }  
                 // 對應邏輯操作
                  return true;  
              }  
              return false;  
          }  
      };  
  • 第三種方法,更加細化,我們可以解決更加複雜的情況。我們可以根據右下鍵是“GO”,“Done”,“Search”鍵的情況下做出更加具體的操作。
    程式碼案例:
    et.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);  
                        }  
                        // 對應邏輯操作
                        return true;  
                    }  
                    return false;  
                }  
            });