应用程序轮换后,为什么InputMethodManager.isFullscreen()不可靠?

时间:2013-02-26 08:24:22

标签: android android-softkeyboard

我目前正在开发一款具有3步身份验证向导的应用。

我需要知道用户是否正在全屏编辑文本,以便我可以关闭键盘而不是继续执行向导中的下一步。

我目前正面临一个恼人的问题,即以下代码在活动旋转后返回错误结果。

    private boolean isFullscreenInputMode(EditText edit) {
        InputMethodManager imm = (InputMethodManager)edit.getContext().getSystemService( Context.INPUT_METHOD_SERVICE  );
        return imm.isFullscreenMode();
    }

该代码用于检测键盘是否处于全屏模式,而ExtractEditText是否用于输入。

如果我的应用程序以横向模式启动并且我继续整个3步向导,则此方法将返回true。如果我一直旋转手机,它就会停止工作。

注意:调用不在onPause或onResume回调方法中执行。正如我从其他帖子中所理解的那样,这些情况会导致方法返回错误的值。

或者,是否有其他方法可以检测键盘是否处于全屏模式?

提前致谢!

编辑为EditText视图上的“完成”按钮添加editorActionListener代码:

        edit.setOnEditorActionListener( new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction( TextView v, int actionId, KeyEvent event ) {
            if( actionId == EditorInfo.IME_ACTION_DONE && edit.getText().length() >= minKeys ) {

                if( !isFullscreenInputMode(edit) ) {
                    performOkPress( edit, okButton, result );
                }
                else {
                    return false;
                }

                return true;
            }
            return false;
        }

        private void performOkPress( final EditText edit, final Button okButton, final ViewResult result ) {
            if( okButton.isEnabled() ) {
                okPressed( edit, okButton, result );
            }
        }
    } );

1 个答案:

答案 0 :(得分:0)

当你旋转屏幕时,这意味着你正在改变从纵向到横向的方向,反之亦然.......每次,你的onCreate会被一次又一次地调用。这就是为什么你看到这些错误的结果。尝试在旋转时保存活动状态...希望它有所帮助