android软键盘显示与隐藏,及强制隐藏软键盘失效的问题

    xiaoxiao2021-03-26  39

    第一步: 在AndroidManifest.xml的文件中声明对应的Activity时加上 android:windowSoftInputMode属性,android:windowSoftInputMode="stateAlwaysHidden|adjustResize" 第二步: private void hideKeyboard(View view) { InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } 注意:必须同时实现以上两个操作,否则会隐藏失败 另外一种方法是重写触摸事件,在触摸事件中进行处理,如果点击的是EditText就显示键盘,如果是点的其他区域就隐藏键盘, 这个方法也要实现上面那个方法的第一步,具体代码如下: @Override public boolean dispatchTouchEvent(MotionEvent ev) { //Finger touch screen event if (ev.getAction() == MotionEvent.ACTION_DOWN) { // get current focus,Generally it is EditText View view = getCurrentFocus(); if (isShouldHideSoftKeyBoard(view, ev)) { hideSoftKeyBoard(view.getWindowToken()); } } return super.dispatchTouchEvent(ev); } private boolean isShouldHideSoftKeyBoard(View view, MotionEvent event) { if (view != null && (view instanceof EditText)) { int[] l = {0, 0}; view.getLocationInWindow(l); int left = l[0], top = l[1], bottom = top + view.getHeight(), right = left + view.getWidth(); if (event.getX() > left && event.getX() < right && event.getY() > top && event.getY() < bottom) { // If click the EditText event ,ignore it return false; } else { return true; } } // if the focus is EditText,ignore it; return false; } private void hideSoftKeyBoard(IBinder token) { if (token != null) { InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS); } }
    转载请注明原文地址: https://ju.6miu.com/read-660853.html

    最新回复(0)