android android-4.0-ice-cream-sandwich android-softkeyboard android-4.2-jelly-bean searchview

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.



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 ... !!