1. 程式人生 > >Android--›EditText不顯示系統鍵盤,可用來顯示自定義的鍵盤

Android--›EditText不顯示系統鍵盤,可用來顯示自定義的鍵盤

系統鍵盤 包含普通鍵盤和現在很多ROM定製的密碼安全鍵盤

在這裡插入圖片描述

但是,此方法是API 21Android 5.0加入的, 所以為了相容低版本, 建議使用已下方法:

 public static final boolean notShowSoftInput(EditText editText) {
      boolean flag = false;

      InputMethodManager imm = (InputMethodManager) editText.getContext()
              .getSystemService(Context.INPUT_METHOD_SERVICE)
; boolean isOpen = imm.isActive();// isOpen若返回true,則表示輸入法開啟 if (isOpen) { if (imm.hideSoftInputFromWindow(editText.getWindowToken(), 0)) flag = true; } // act.getWindow().setSoftInputMode( // WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); int
currentVersion = android.os.Build.VERSION.SDK_INT; String methodName = null; if (currentVersion >= 16) { // 4.2 methodName = "setShowSoftInputOnFocus"; } else if (currentVersion >= 14) { // 4.0 methodName = "setSoftInputShownOnFocus"; }
if (methodName == null) { editText.setInputType(InputType.TYPE_NULL); } else { Class<EditText> cls = EditText.class; Method setShowSoftInputOnFocus; try { setShowSoftInputOnFocus = cls.getMethod(methodName, boolean.class); setShowSoftInputOnFocus.setAccessible(true); setShowSoftInputOnFocus.invoke(editText, false); } catch (NoSuchMethodException e) { editText.setInputType(InputType.TYPE_NULL); e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } return flag; }

4.2低版本中有一個setSoftInputShownOnFocus方法, 但是被宣告成hide了, 所以通過反射呼叫.
再低一點的版本,直接通過setInputType的方式相容.

以上方法呼叫後, EditText獲取到焦點時,就不會彈出系統的鍵盤了.
然後彈出自定義的鍵盤,就可以完美解決衝突了.

推薦工程

也許你還想學習更多, 來我的群吧, 我寫程式碼的能力, 遠大於寫文章的能力:

聯絡作者

請使用QQ掃碼加群, 小夥伴們都在等著你哦!

關注我的公眾號, 每天都能一起玩耍哦!