Android 更改軟鍵盤右下角按鍵的樣式以及監聽此鍵的方法
阿新 • • 發佈:2018-12-24
一、我們在開發Android App時有時候會遇到更改軟鍵盤右下角按鍵的樣式
- 我們可以隨自己的需求更改軟鍵盤右下角的顯示樣式,例如:搜尋,下一步,Q(搜尋圖示)
具體對應:
- actionNone : 按下後游標到下一行(回車)
- actionGo : 按下後搜尋(Go)
- actionSearch : 放大鏡
- actionSend : Send 按下後傳送
- actionNext : Next 下一步
- 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;
}
});