다음 코드는 나를 위해 일한 애프터, 다른 두 답변 나를 위해 작동하지 않았다 :
@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);
기술적으로 소프트 키보드 디스플레이 요청을 실행하기 전에 300ms의 지연을 추가했습니다. 이상 하죠? 또한 변경 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);