4

Android: EditText にフォーカスがあるときにソフト キーボードを自動的に表示する

ダイアログボックスが表示されたときに仮想キーボードを自動的に表示するこの投稿を読みました。しかし、それは私にとってはうまくいきません。なぜアイデアはありますか?ダイアログボックスが表示されると編集テキストが自動的にフォーカスされますが、イベントはトリガーされません。onpostresume の回答も読みましたが、適用方法がわかりません。どんな助けでも大歓迎です。

final Dialog dialog = new Dialog(ThesisI.this);
        dialog.setContentView(R.layout.budget_dialog);


        final EditText et = (EditText) dialog.findViewById(R.id.textComments);
        final Button enter = (Button) dialog.findViewById(R.id.buttonEnter);
        final Button cancel = (Button) dialog.findViewById(R.id.buttonCancel);

        enter.setOnClickListener(new View.OnClickListener() {
      @Override
   public void onClick(View v) {

      }
        });
        /**cancel */
        cancel.setOnClickListener(new View.OnClickListener() {
      @Override
   public void onClick(View v) {
   }
        });       
        dialog.show(); 

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

                }
            }
        });

ただし、フォーカスをボタンに変更すると、再び編集テキストにフォーカスすることに気付きました。このイベントは、以下のコードを使用して機能します。

et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus) {
                   InputMethodManager inputMgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                      inputMgr.toggleSoftInput(0, 0);
                }
            }
        });

それを適用する方法について何か考えはありますか?

4

2 に答える 2

13

あなたができることはpostDelayed(Runnable)、以下のように EditText を使ってみることです。

                ettext.requestFocus();
                ettext.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        InputMethodManager keyboard = (InputMethodManager)
                        getSystemService(Context.INPUT_METHOD_SERVICE);
                        keyboard.showSoftInput(ettext, 0);
                    }
                },200);
于 2011-12-16T09:51:31.347 に答える
2

前に以下の行を追加してみてください"et.setOnFocusChangeListener"

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
                    .showSoftInput(et, 2);
于 2010-12-06T11:25:35.000 に答える