Android: диалоговое окно автоматически отображает программную клавиатуру, когда фокус на EditText не работает - PullRequest
4 голосов
/ 26 октября 2010

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

есть идеи, как его применить?

Ответы [ 2 ]

13 голосов
/ 16 декабря 2011

Что вы можете сделать, это попробовать 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);
2 голосов
/ 06 декабря 2010

Просто попробуйте добавить следующую строку перед "et.setOnFocusChangeListener"

((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
                    .showSoftInput(et, 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...