79

エディットテキストビューのダイアログを表示しています。ただし、ソフトキーボードは、ユーザーがエディットビュー内を押した場合にのみ開きます。そこで、次のコードでInputMethodManagerを呼び出してみました。

InputMethodManager imm =
 (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(dialogField,0);

dialogFieldは入力フィールドです。しかし、正確にいつこれを行うことになっていますか?ダイアログのonStart()メソッドで試しましたが、何も起こりません。以前にdialogFieldのフォーカスをリクエストしようとしましたが、何も変わりません。

私もこのコードを試しました

dialogField.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
    public void onFocusChange (View v, boolean hasFocus)
    {
        if (hasFocus)
        {
            Main.log("here");
            dialogInput.getWindow().setSoftInputMode(
              WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            /*
                InputMethodManager mgr =
                  (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                mgr.showSoftInput(dialogField,0);
            */
        }
    }
});

両方のバージョンで。ただし、ソフトキーボードは表示されません。Main.logは単なるログであり、関数が実際に呼び出されていることを示しています。そして、はい、それは呼ばれています。

ダイアログが開く前に、SHOW_FORCEDフラグが付いたキーボードを入手できました。ただし、終了時に閉じません。そして、私はダイアログを表示する前にそれを行うことができるだけです。コールバック内でも機能しません。

4

5 に答える 5

192

素晴らしい質問です。私もそれをやろうとしていて、解決策を見つけました。

ダイアログ ビルダー クラスAlertDialog.Builderを使用して、次のようにダイアログを呼び出す必要があります。

AlertDialog.Builder builder = new AlertDialog.Builder();
AlertDialog dialog;

builder.set...

dialog = builder.create();
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
dialog.show();

これは私にとってはうまくいきました。

注:import android.view.WindowManager.LayoutParams;そこに定数値が必要です。

于 2013-10-24T17:53:28.273 に答える