Android.EditText點擊時,隱藏系統彈出的鍵盤,顯示出光標

因爲要用自己創建的虛擬大鍵盤,所以屏蔽系統的鍵盤,但是在4.1的測試系統來看,使用editText.setInputType(InputType.TYPE_NULL)方法固然能隱藏鍵盤,但是光標也會隱藏,所以無法使用。
3.0以下版本可以用editText.setInputType(InputType.TYPE_NULL)來實現。或者設置editText.setKeyListener(null)來實現.
3.0以上版本除了調用隱藏方法:setShowSoftInputOnFocus(false),由於是系統內部方法。無法直接調用所以採用反射的方式來進行調用,如下

Class<EditText> cls = EditText.class;
try {
Method setShowSoftInputOnFocus = cls.getMethod("setShowSoftInputOnFocus", boolean.class);
setShowSoftInputOnFocus.setAccessible(false);
setShowSoftInputOnFocus.invoke(mEtInput, false);
catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

 上面反射的方法是從TextView的源碼中找到的。因爲EditText是繼承它的,看網上據說有的sdk裏面是"setSoftInputShownOnFocus",反正具體是跟自己的sdk相對應就可以了

if (android.os.Build.VERSION.SDK_INT <= 10) {
                mEtInput.setInputType(InputType.TYPE_NULL);
            } else {
                getWindow().setSoftInputMode(
                        WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
                try {
                    Class<EditText> cls = EditText.class;
                    Method setShowSoftInputOnFocus;
                    setShowSoftInputOnFocus = cls.getMethod("setShowSoftInputOnFocus",
                            boolean.class);
                    setShowSoftInputOnFocus.setAccessible(true);
                    setShowSoftInputOnFocus.invoke(mEtInput, false);
                } catch (Exception e) {
                    e.printStackTrace();
                } 
  }

發佈了110 篇原創文章 · 獲贊 7 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章