現在、3段階認証ウィザードを備えたアプリに取り組んでいます。
ウィザードの次のステップに進む代わりにキーボードを閉じることができるように、ユーザーが全画面表示でテキストを編集しているかどうかを知る必要があります。
現在、アクティビティが回転した後に次のコードが誤った結果を返すという厄介な問題に直面しています。
private boolean isFullscreenInputMode(EditText edit) {
InputMethodManager imm = (InputMethodManager)edit.getContext().getSystemService( Context.INPUT_METHOD_SERVICE );
return imm.isFullscreenMode();
}
このコードは、キーボードがフルスクリーン モードであるかどうかを検出し、ExtractEditText を入力に使用することを目的としています。
アプリがランドスケープ モードで開始し、3 ステップのウィザード全体を続行すると、このメソッドは true を返します。途中で携帯電話を1回回転させると、機能しなくなります。
注: 呼び出しは 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 );
}
}
} );