Невозможно показать клавиатуру автоматически в SearchView

SearchView ориентирован по умолчанию, но когда я пытаюсь показать программную клавиатуру – этого не происходит:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); 

Но когда я нажимаю на SearchView – он делает. Зачем?

Solutions Collecting From Web of "Невозможно показать клавиатуру автоматически в SearchView"

Исправлена!

 mSearchView.setOnQueryTextFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean hasFocus) { if (hasFocus) { showInputMethod(view.findFocus()); } } }); 

А также

 private void showInputMethod(View view) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); if (imm != null) { imm.showSoftInput(view, 0); } } 

Я столкнулся с этой проблемой с SearchView, который все еще не открыл клавиатуру, и смог сделать это, добавив задержку в 200 мс:

  mSearchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(final View view, boolean hasFocus) { if (hasFocus) { view.postDelayed(new Runnable() { @Override public void run() { InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(view.findFocus(), 0); } }, 200); } } }); 

Как насчет использования setOnFocusChangeListener ?

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

Если вы используете SearchView :

 <android.support.v7.widget.SearchView android:id="@+id/searchView" android:layout_width="match_parent" android:layout_height="wrap_content" android:focusableInTouchMode="true" android:iconifiedByDefault="true" app:showAsAction="always" app:iconifiedByDefault="true"/> 

Затем просто добавьте его в свой метод onCreate :

 final SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE); searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); searchView.setIconifiedByDefault(false); searchView.setFocusable(true); searchView.setIconified(false); searchView.requestFocusFromTouch(); 

Меня устраивает.

Я решил эту проблему следующим простым способом.

Элемент меню SearchView:

 <item android:id="@+id/menu_item_search" android:icon="@drawable/ic_search" android:title="@android:string/search_go" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="**always|collapseActionView**" /> 

Чтобы развернуть SearchView и показать клавиатуру программным способом:

 mMenuItemSearch.expandActionView(); mSearchView.setQuery("your default query test or null", true); 

Протестировано с различными флажками showAsAction. В результате клавиатура не отображается, когда флаг: « всегда ». Однако все работает с флагом: « always | collapseActionView »

ExpandActionView () + setQuery ("null или восстановленный текст", true); Можно вызвать, когда созданный (или восстановленный) просмотр отображает клавиатуру и фокусируется на поиске. PS: вызов mSearchView.clearFocus (); После этого двух методов, если вам не нужен фокус поиска.

Пытаться:

 void focusSearchViewAndOpenOrCloseKeyboard(boolean focus) { searchView.setIconified(focus); } 

Источник показывает, что SearchView обрабатывает свое закрытие и открытие мягкой клавиатуры .