隐藏键盘时停止关注EditText

我来自iOS开发和Android应用程序制作的新功能,在Android中看起来很奇怪,为什么EditText在键盘被隐藏时保持专注?

我试图在我的EditText上设置一个OnFocusChangeListener,但是当键盘隐藏时,这不起作用,不调用监听器。

我也尝试使用onChangeListener检测键盘隐藏,但它不起作用..(显然只有硬键盘)。

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // not called when keyboard hides
        }
    });

我一直在寻找一段时间,我只找到了在首次发布时停止焦点的答案,但这不是我想要的......

谢谢


幕布斯6054654
浏览 587回答 6
6回答

芜湖不芜

试试这个:this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

慕标琳琳

要捕获键盘的打开/关闭事件,请使用以下代码:    //...    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;        }

慕桂英4014372

您可以简单地使用此代码,您的重点将会消失editText.clearFocus();

慕神8447489

最近我用一个好的库解决了这个问题。它处理键盘可见性事件。将其添加到您的应用程序级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.         }     });遗憾的是,没有“正确”的方法来处理键盘可见性事件。你得到的只是黑客来检测它。

ITMISS

使用editText.clearFocus()和editText.setCursorVisible(false)两种方法,它可能会帮助你。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java