首页 > 解决方案 > 登录表单:单击按钮时键盘隐藏,但单击edittext后不再显示

问题描述

我有一个带有编辑文本和登录按钮(连接)的登录表单。当用户单击编辑文本时,键盘打开,当他们单击登录按钮(连接)时,键盘消失。问题是如果用户在单击登录按钮后单击编辑文本,键盘会显示一秒钟,然后消失。使用 rootview 计算键盘是否显示,因为根据stackoverflow,这似乎是最简单的方法。我如何制作它以便在单击按钮后可以显示键盘?

点击监听器

boolean clicked=false;

        connect.setOnClickListener(v -> {


        clicked=true;
        keyboard();

    });

键盘法

    void keyboard(){

    InputMethodManager inputManager = (InputMethodManager)
            getSystemService(Context.INPUT_METHOD_SERVICE);

        final View activityRootView = findViewById(R.id.wrap);
        activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Rect r = new Rect();
                activityRootView.getWindowVisibleDisplayFrame(r);

                if (clicked) {
                    int heightDiff = activityRootView.getRootView().getHeight() - (r.bottom - r.top);
                    if (heightDiff > 0.25 * activityRootView.getRootView().getHeight()) {
                        inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                                InputMethodManager.HIDE_NOT_ALWAYS);
                    }
                }
            }
        });


}

标签: javaandroidonclick

解决方案


每次布局更新都会调用您的 onGlobalLayout 侦听器,如果单击按钮后每次布局更新都会关闭键盘

if (heightDiff > 0.25 * activityRootView.getRootView().getHeight())

您可以直接在 ButtonClickListener 中直接关闭键盘

connect.setOnClickListener(v -> { 
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);        });

推荐阅读