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