欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-02 14:54:55
...
第一步:
在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);
    }
}

相关标签: android