Android--›EditText不顯示系統鍵盤,可用來顯示自定義的鍵盤
阿新 • • 發佈:2019-01-08
系統鍵盤
包含普通鍵盤
和現在很多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掃碼加群, 小夥伴們都在等著你哦!
關注我的公眾號, 每天都能一起玩耍哦!