Android軟鍵盤使用總結
Edittext在平時開發中很是常見,因為只要有輸入框,就可能會對Edittext進行特殊的操作,比如自動彈出軟鍵盤,禁止自動彈出,監聽輸入等。
1.Edittext禁止自動彈出軟鍵盤
在Edittext的父控制元件中新增如下屬性即可,讓它的父控制元件自動獲取焦點。
android:focusable="true" android:focusableInTouchMode="true"
2.自動彈出軟體盤
讓edittext自動獲取焦點,彈出系統的軟鍵盤。大家在實際使用中很可能會遇到不生效的問題,這裡需要加上短時間的延時,不然不會生效。
public static void showSoftInput(final Context context, final EditText et) { new Timer().schedule(new TimerTask() { @Override public void run() { ((Activity) context).runOnUiThread(new Runnable() { @Override public void run() { et.setFocusable(true); et.setFocusableInTouchMode(true); //請求獲得焦點 et.requestFocus(); //呼叫系統輸入法 InputMethodManager inputManager = (InputMethodManager) et .getContext().getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.showSoftInput(et, 0); } }); } }, 100); }
3.程式碼控制關閉軟鍵盤
public static void closeSoftInput(EditText editText,Context context) { InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isActive()) { imm.hideSoftInputFromWindow(editText.getApplicationWindowToken(), 0); } }
4.設定Edittext的imeOptions屬性
EditText的imeOptions屬性有8種,分別是:
-
actionDone對應 EditorInfo.IME_ACTION_DONE型別
Enter鍵顯示完成 -
actionGo 對應 EditorInfo.IME_ACTION_GO 型別
Enter鍵顯示前進 -
actionNext對應 EditorInfo.IME_ACTION_NEXT 型別
Enter鍵顯示下一項 -
actionNone對應 EditorInfo.IME_ACTION_NONE 型別
Enter鍵顯示無動作 -
actionPrevious對應 EditorInfo.IME_ACTION_PREVIOUS 型別
Enter鍵顯示上一項 -
actionSearch對應 EditorInfo.IME_ACTION_SEARCH 型別
Enter鍵顯示搜尋 -
actionUnspecified對應 EditorInfo.IME_ACTION_UNSPECIFIED 型別
Enter鍵顯示未指定 -
actionSend對應 EditorInfo.IME_ACTION_SEND型別
Enter鍵顯示傳送
例如,監聽鍵盤的enter鍵,使用對edittext設定KeyListener,通過回撥的keyCode == KeyEvent.KEYCODE_ENTER判斷是否點選enter鍵。不過這樣會呼叫兩次,一次是up事件,一次是down事件,可以再加入一個條件過濾其中一個事件。
mEditText.setOnKeyListener(new View.OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_UP) { //監聽到enter鍵抬起事件 } return false; } });