Как сфокусироваться на сворачиваемом элементе EditText представления действий на панели действий (когда он развернут) и принудительно открыть виртуальную клавиатуру?

Я использую прекрасную библиотеку Jake Wharton ActionBarSherlockи имею сворачиваемое представление действия поиска. Я хочу, чтобы всплывающая экранная клавиатура отображалась при расширении представления действия поиска.

Мы можем прочитать рекомендуемый способ сделать это в DialogFragment в сообщении блога Google " Using DialogFragments" (немного изменено для удобства чтения).

// Show soft keyboard automatically
mEditText.requestFocus();
int mode = WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE;
getDialog().getWindow().setSoftInputMode(mode);

Похоже, это не работает при развертывании и запросе фокуса на сворачиваемом представлении действия EditText. В настоящее время у меня есть это.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.my_activity, menu);

    MenuItem menuItem = menu.findItem(R.id.menu_search);
    final EditText searchText = (EditText) menuItem.getActionView();

    menuItem.setOnActionExpandListener(new OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            return true; // Return true to collapse action view
        }

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            searchText.requestFocus();
            int mode = WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE;
            getWindow().setSoftInputMode(mode);
            return true; // Return true to expand action view
        }
    });
}

Вот мое определение пункта меню в xml-файле меню my_activity:


... и макет действия collapsible_edittext



Предостережение: я не хочу принудительнопрограммную клавиатуру. Когда у пользователя есть аппаратная клавиатура, запрашивающая фокус, этого достаточно.

Есть какие-нибудь мысли?

19
задан Johan Pelgrim 13 June 2012 в 08:48
поделиться