122

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

残念ながら、もう一度明示的に触れない限り、 EditTextにフォーカスがあっても、ソフト キーボードはポップしません。

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

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

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

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

ありがとう!!

4

14 に答える 14

228

そんなものを作ってしまった

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

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

dialog.show();
于 2011-07-20T09:00:15.467 に答える
7

inshowDialog()を使用して作成されたダイアログを表示するために呼び出す場合AlertDialogonCreateDialog()

コードをonPrepareDialog()次の場所に配置する必要があります。

@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);
         }
       }
    });
}
于 2011-01-26T16:52:27.230 に答える
2
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);
于 2016-05-12T06:24:24.047 に答える
1

これはすでにここで回答されています。OnFocusChangeListener を使用するとうまくいきました。

于 2010-09-09T19:27:18.093 に答える
0

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

ソフトキーボードを表示したい場合:

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);
于 2016-03-30T11:12:24.950 に答える
0

これに対する簡単で信頼できる解決策を見つけました。編集可能なフィールドがルートにない複雑なレイアウトを取得した場合は、ダイアログ レイアウトのルートに非表示の EditText を配置するだけです。

<!-- Just to trick AlertDialog to not hide soft keyboard -->
<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:visibility="gone" />

これは基本的に、compat/androidx のこの部分をだますためです。

onResume以前は上記のソリューションを使用していましたが、より単純な API をAlertDialog.Builder()使用して使用を削除することはできませんでしAppCompatDialogFragmentたが、今ではより簡単な API を使用することができます。

于 2021-05-13T22:42:47.200 に答える