为了账号安全,请及时绑定邮箱和手机立即绑定

隐藏键盘时停止关注EditText

隐藏键盘时停止关注EditText

幕布斯6054654 2019-04-18 15:11:40
我来自iOS开发和Android应用程序制作的新功能,在Android中看起来很奇怪,为什么EditText在键盘被隐藏时保持专注?我试图在我的EditText上设置一个OnFocusChangeListener,但是当键盘隐藏时,这不起作用,不调用监听器。我也尝试使用onChangeListener检测键盘隐藏,但它不起作用..(显然只有硬键盘)。        @Override         public void onFocusChange(View v, boolean hasFocus) {             // not called when keyboard hides         }     });我一直在寻找一段时间,我只找到了在首次发布时停止焦点的答案,但这不是我想要的......谢谢
查看完整描述

6 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

试试这个:


this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);


查看完整回答
反对 回复 2019-05-15
?
慕标琳琳

TA贡献1830条经验 获得超9个赞

要捕获键盘的打开/关闭事件,请使用以下代码:


    //...

    private int layoutSize = 0;

    private boolean isKeyboardVisible = false;

    //...

    @Override

    public void onCreate(Bundle savedInstanceState) {

        setKeyboardOpenListener();

    }

    //...

    private void setKeyboardOpenListener() {

            View activityRootView = findViewById(android.R.id.content);

            activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {

                if (activityRootView.getHeight() + Util.getStatusBarHeight(this) >= layoutSize) {

                    layoutSize = activityRootView.getHeight();

                    if (isKeyboardVisible) {

                        isKeyboardVisible = false;

                        onKeyboardClose();

                    }

                } else {

                    if (!isKeyboardVisible) {

                        isKeyboardVisible = true;

                        onKeyboardOpen();

                    }

                }

            });

        }

    //...

    public static int getStatusBarHeight(Context context) {

            int result = 0;

            int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");

            if (resourceId > 0) {

                result = context.getResources().getDimensionPixelSize(resourceId);

            }

            return result;

        }


查看完整回答
反对 回复 2019-05-15
?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

您可以简单地使用此代码,您的重点将会消失

editText.clearFocus();


查看完整回答
反对 回复 2019-05-15
?
慕神8447489

TA贡献1780条经验 获得超1个赞

最近我用一个好的库解决了这个问题。它处理键盘可见性事件。

将其添加到您的应用程序级Gradle文件

dependencies {implementation'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:2.3.0'}

启用键盘事件:

KeyboardVisibilityEvent.setEventListener(
    getActivity(),
    new KeyboardVisibilityEventListener() {
        @Override
        public void onVisibilityChanged(boolean isOpen) {
            if (isOpen)
                  //Keyboard is showing.
            else
               yourEditText.clearFocus()
               yourEditText.setCursorVisible(false) //Only if the cursor keeps blinking else no need use it.
                 //Keyboard is now closed.
        }
    });

遗憾的是,没有“正确”的方法来处理键盘可见性事件。你得到的只是黑客来检测它。


查看完整回答
反对 回复 2019-05-15
?
ITMISS

TA贡献1871条经验 获得超8个赞

使用editText.clearFocus()和editText.setCursorVisible(false)两种方法,它可能会帮助你。


查看完整回答
反对 回复 2019-05-15
  • 6 回答
  • 0 关注
  • 527 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号