2

我目前正在开发一个具有 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 );
            }
        }
    } );
4

1 回答 1

0

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

于 2013-02-26T08:29:18.257 回答