目標是在顯示系統輸入法的時候想要隱藏系統下方的系統選單
在安卓模擬器上運行的情況如下:

下面是活動中的重寫的顯示系統輸入法的方法
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
if (ev.getAction() == MotionEvent.ACTION_DOWN) {
View v = getCurrentFocus();
if (isShouldHideInput(v, ev)) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
assert v != null;
imm.hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
v.setClickable(true);
v.setFocusable(true);
v.setFocusableInTouchMode(true);
v.requestFocusFromTouch();
Log.e(TAG, "dispatchTouchEvent: 111111111111111111" );
}
}
Log.e(TAG, "dispatchTouchEvent: 22222222222222222222222" );
return super.dispatchTouchEvent(ev);
}
Log.e(TAG, "dispatchTouchEvent: 333333333333333333333" );
// 必不可少,否則所有的組件都不會有TouchEvent了
return getWindow().superDispatchTouchEvent(ev) || onTouchEvent(ev);
}
public boolean isShouldHideInput(View v, MotionEvent event) {
if (v != null && (v instanceof EditText)) {
int[] leftTop = {0, 0};
//獲取輸入框當前的location位置
v.getLocationInWindow(leftTop);
int left = leftTop[0];
int top = leftTop[1];
int bottom = top + v.getHeight();
int right = left + v.getWidth();
return !(event.getX() > left && event.getX() < right
&& event.getY() > top && event.getY() < bottom);
}
return false;
}
uj5u.com熱心網友回復:
頂一下呀,大佬們uj5u.com熱心網友回復:
/**
* 禁掉系統軟鍵盤
*/
public void hideSoftInputMethod() {
mActivity.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) {
mEdit.setInputType(InputType.TYPE_NULL);
} else {
Class<EditText> cls = EditText.class;
Method setShowSoftInputOnFocus;
try {
setShowSoftInputOnFocus = cls.getMethod(methodName, boolean.class);
setShowSoftInputOnFocus.setAccessible(true);
setShowSoftInputOnFocus.invoke(mEdit, false);
} catch (NoSuchMethodException e) {
mEdit.setInputType(InputType.TYPE_NULL);
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
自己參考
uj5u.com熱心網友回復:
大佬這個方法是隱藏系統輸入法的吧,我只想在顯示系統輸入法的之后不顯示系統選單欄,就是輸入法下面的回傳,首頁,和選單的虛擬按鍵,有辦法嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/111318.html
標籤:Android
