次のコードは、 私のために働いた後、他の2つの答え は私のために動作しませんでした。
@Override
public void onResume() {
super.onResume();
SingletonBus.INSTANCE.getBus().register(this);
passwordInput.postDelayed(new ShowKeyboard(), 300);
}
どこにShowKeyboard
ありますか
private class ShowKeyboard implements Runnable {
@Override
public void run() {
passwordInput.setFocusableInTouchMode(true);
passwordInput.requestFocus();
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(passwordInput, 0);
}
}
入力が成功したら、キーボードも非表示にします
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
((InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(getView().getWindowToken(), 0);
技術的には、ソフトキーボードの表示要求を実行する前に300ミリ秒の遅延を追加しました。変だよね?また、に変更されrequestFocus()
ましたrequestFocusFromTouch()
。
編集:requestFocusFromTouch()
それを使用しないでくださいそれはランチャーにタッチイベントを与えます。に固執しrequestFocus()
ます。
EDIT2:ダイアログ(DialogFragment
)で、以下を使用します
getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
の代わりに
getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);