android - No se puede mostrar el teclado automáticamente en el SearchView
android-4.0-ice-cream-sandwich android-softkeyboard (7)
El SearchView está enfocado de forma predeterminada, pero cuando intento mostrar el teclado del software, no sucede:
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
Pero cuando hago clic en SearchView, lo hace. ¿Por qué?
¡Fijo!
mSearchView.setOnQueryTextFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus) {
showInputMethod(view.findFocus());
}
}
});
Y
private void showInputMethod(View view) {
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.showSoftInput(view, 0);
}
}
¿Qué pasa con el uso de 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);
}
}
});
Encontré este problema con un SearchView que aún no abría el teclado, y pude hacerlo agregando un retraso de 200 ms:
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);
}
}
});
Resolví este problema de la siguiente manera simple.
Elemento del menú 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" />
Para expandir SearchView y mostrar el teclado mediante programación llame:
mMenuItemSearch.expandActionView();
mSearchView.setQuery("your default query test or null", true);
Probado con diferentes banderas showAsAction. Como resultado el teclado no se muestra cuando marca: " siempre ". Sin embargo, todo funciona con el indicador: " siempre | contraerAcciónVista "
expandActionView () + setQuery ("texto nulo o restaurado", verdadero); se puede llamar cuando se crea una vista (o se restaura) para mostrar el teclado y centrarse en la búsqueda. PS: llame a mSearchView.clearFocus (); después de estos dos métodos para despejar el enfoque.
Si está utilizando 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"/>
Luego simplemente agrégalo a tu método onCreate :
final SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);
searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
searchView.setIconifiedByDefault(false);
searchView.setFocusable(true);
searchView.setIconified(false);
searchView.requestFocusFromTouch();
Esto funciona para mi.
Tratar:
void focusSearchViewAndOpenOrCloseKeyboard(boolean focus) {
searchView.setIconified(focus);
}
La source nos muestra que SearchView
maneja su propio cierre y apertura del teclado virtual .
La mejor y más sencilla forma de hacerlo:
android:focusable="true"
app:iconifiedByDefault="false"
android:focusableInTouchMode="true"
Agrega más de tres líneas en tu xml bajo SearchView y ve la magia ... !!