因爲要用自己創建的虛擬大鍵盤,所以屏蔽系統的鍵盤,但是在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 ; |
Method
setShowSoftInputOnFocus = cls.getMethod( "setShowSoftInputOnFocus" ,
boolean. class ); |
setShowSoftInputOnFocus.setAccessible( false ); |
setShowSoftInputOnFocus.invoke(mEtInput, false ); |
} catch (NoSuchMethodException
e) { |
} catch (IllegalArgumentException
e) { |
} catch (IllegalAccessException
e) { |
} catch (InvocationTargetException
e) { |
上面反射的方法是從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();
}
}