web-dev-qa-db-ja.com

EditDialogでAlertDialog.Builderを使用すると、ソフトキーボードがポップしません。

入力メソッドとしてEditTextを使用して、入力ボックスを作成するためにAlertDialog.Builderを使用しています。

残念ながら、ソフトキーボードはポップアップしませんが、明示的に再度タッチしない限り、EditTextがフォーカスされています。

強制的にポップする方法はありますか?

私は次のことを試しました(AlertDialog.Builder).show();の後しかし、無駄です。

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

誰でも助けることができますか?

ありがとう!!

111
niros

私はそのようなものを作りました

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

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

dialog.show();
215
grine4ka

私はこのようにそれを解決することができました:

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);
25

同じコードがタブレットでも正常に機能し、キーボードがポップアップすることを発見しましたが、電話では機能しないため、さらに調査すると「調整」オプションを指しているようです。

私はこれを使用していますが、ずっときれいに感じます。

AlertDialog d = builder.create();
d.getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
d.show();
22
Phuah Yee Keat

私の場合、ダイアログが表示されたときにキーボードを表示できる唯一の方法は、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_VISIBLEではなく、SOFT_INPUT_STATE_ALWAYS_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.
7
vovahost

ShowDialogを呼び出して、onCreateDialogのAlertDialogを使用して作成されたダイアログを表示する場合

ここにコードを配置する必要があります

    @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);
         }
       }
    });

}
6
user590912

より良い解決策が与えられます here

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

回避策はありません。 EditTextは期待どおりに動作します。

5
sulai
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);
2
Mohammed Shoeb

これは答えられました here すでに。 OnFocusChangeListenerを使用するとうまくいきました。

1
dhaag23

これを試してください、それは私のために働いています

ソフトキーボードを表示する場合:

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.showSoftInput(input.getWindowToken(), 0);

そしてそれを非表示にしたい場合:

  InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
0
Yogesh Rathi
final AlertDialog.Builder alert = new AlertDialog.Builder(context);

final AlertDialog dialog = alert.show();
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
0
TonnyTao