AlertDialog.Builder를 EditText와 함께 사용할 때 소프트 키보드가 표시되지 않습니다. 명시 적으로

입력 방법으로 EditText를 사용하여 입력 상자를 만들기 위해 AlertDialog.Builder 를 사용 하고 있습니다.

안타깝게도 소프트 키보드는 사용자가 명시 적으로 다시 터치하지 않는 한 EditText 에 포커스가 있어도 팝업되지 않습니다 .

강제로 터뜨리는 방법이 있습니까?

(AlertDialog.Builder) .show (); 후에 다음을 시도했습니다 . 그러나 아무 소용이 없습니다.

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(input, InputMethodManager.SHOW_FORCED);

누구든지 도울 수 있습니까?

감사!!



답변

나는 그런 것을 만들었다

AlertDialog.Builder b = new AlertDialog.Builder(this);//....
AlertDialog dialog = b.create();

dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

dialog.show();

답변

나는 이것을 다음과 같이 해결할 수 있었다.

Dialog = builder.create();
Dialog.show();
Dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE  | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
Dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

답변

동일한 코드가 태블릿에서 제대로 작동하고 키보드가 표시되지만 전화에서는 표시되지 않으므로 더 자세히 조사해 보면 “조정”옵션을 가리키는 것 같습니다.

나는 이것을 사용하고 있으며 훨씬 더 깨끗하게 느껴집니다.

AlertDialog d = builder.create();
d.getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
d.show();

답변

제 경우에는 대화 상자가 표시 될 때 키보드를 표시 할 수있는 유일한 방법은 다음을 추가하는 것입니다 DialogFragment.

@Override
public void onResume() {
    super.onResume();
    getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    myEditText.requestFocus();
}

메모 SOFT_INPUT_STATE_ALWAYS_VISIBLE 대신 SOFT_INPUT_STATE_VISIBLE을 .

문서에서 :

int SOFT_INPUT_STATE_ALWAYS_VISIBLE
Visibility state for softInputMode: please always make the soft input area visible when this window receives input focus.

답변

onCreateDialog에서 AlertDialog를 사용하여 만든 Dialogue를 표시하기 위해 showDialog를 호출 할 때

여기에 코드를 입력해야합니다.

    @Override
protected void onPrepareDialog (int id, Dialog dialog, Bundle args)
{
    TextView editText=(TextView) dialog.findViewById(R....);

    editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
       @Override
       public void onFocusChange(View v, boolean hasFocus) {
         if (hasFocus) {
            dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
         }
       }
    });

}

답변

여기에 훨씬 더 나은 솔루션이 제공 됩니다 .

dialog.getWindow().clearFlags(
         WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
        |WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

해결 방법이 없습니다. EditText예상대로 작동합니다.


답변

Window window = dialog.getWindow();
    window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);