Невозможно отобразить клавиатуру автоматически в SearchView
SearchView ориентирован по умолчанию, но когда я пытаюсь показать программную клавиатуру - этого не происходит:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
Но когда я нажимаю на SearchView - он делает. Почему?
Ответы
Ответ 1
Фиксированный!
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);
}
}
Ответ 2
Я столкнулся с этой проблемой с 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);
}
}
});
Ответ 3
Как насчет использования 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);
}
}
});
Ответ 4
Если вы используете 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();
Это работает для меня.
Ответ 5
Try:
void focusSearchViewAndOpenOrCloseKeyboard(boolean focus) {
searchView.setIconified(focus);
}
source показывает нам, что SearchView
обрабатывает свой собственный закрытие и открытие мягкой клавиатуры.
Ответ 6
Я решил эту проблему следующим простым способом.
Пункт меню 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. Как результат, клавиатура не отображается, когда флаг: " всегда". Однако все работает с флагом: " всегда | collapseActionView"
expandActionView() + setQuery ( "null или восстановленный текст", true); можно вызвать, когда представление создано (или восстановлено), чтобы отобразить клавиатуру и сфокусироваться на поиске. P.S: вызов mSearchView.clearFocus(); после этого двух методов очистки фокуса.