¿Hay una manera de evitar tener FullView SearchView / Keyboard en el paisaje?

Estoy tratando de evitar tener la edición de teclado en pantalla completa en el paisaje con el fin de acceder a las sugerencias.

Ya he leído un montón de hilos explicando que tengo que añadir EditorInfo banderas como flagNoFullscreen y / o flagNoExtractUi .

Los agregué programáticamente pero no realmente útil.

¿Hay una manera de resolver esto?

Me tomó un tiempo para averiguar esto, pero en realidad es bastante simple.

Inicialmente creé una clase personalizada que amplió la clase onCreateInputConnection() y usé un onCreateInputConnection() , sin embargo no pude conseguir que funcione de esa manera.

Finalmente lo conseguí trabajando de una manera mucho más simple, con sólo dos líneas añadidas de código.

Sólo tiene que llamar a search.getImeOptions() para obtener la configuración actual y, a continuación, "o" el resultado con EditorInfo.IME_FLAG_NO_EXTRACT_UI con una llamada a setImeOptions() :

 search.setImeOptions(options|EditorInfo.IME_FLAG_NO_EXTRACT_UI); 

Si no "o" con las opciones existentes, entonces no obtendrá el botón de finalización "Buscar" en la parte inferior derecha, sólo obtendrá un botón "Listo" en su lugar.

Aquí está el onCreateOptionsMenu() completo de onCreateOptionsMenu() que usé para probar (utilicé un SearchView en el xml, pero esta solución debería funcionar para usted aunque no esté inflando su SearchView desde xml):

 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); SearchManager manager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView search = (SearchView) menu.findItem(R.id.action_search).getActionView(); SearchableInfo si = manager.getSearchableInfo(getComponentName()); //Here is where the magic happens: int options = search.getImeOptions(); search.setImeOptions(options|EditorInfo.IME_FLAG_NO_EXTRACT_UI); //!!!!!!!!!!! search.setSearchableInfo(si); search.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String query) { return true; } }); return true; } 

Aquí está el xml que utilicé para el SearchView en menu_main.xml:

 <item android:id="@+id/action_search" android:title="Search" android:icon="@android:drawable/ic_menu_search" app:showAsAction="ifRoom" app:actionViewClass="android.support.v7.widget.SearchView" /> 

Resultado sin la llamada a setImeOptions() :

antes de

Resultado con la llamada a setImeOptions() :

Introduzca aquí la descripción de la imagen

  • Android Webview loadUrl no funciona cuando viene de un hilo de trabajo
  • OutOfMemoryException en el emulador
  • Creación de una imagen de fondo para la aplicación de Android - Java
  • Android.util.AndroidRuntimeException: requestFeature () debe ser llamado antes de agregar contenido
  • ¿Cómo incluir archivos '.jar' en React-native para Android?
  • Android - View.requestLayout no funciona en OnLayoutChangeListener
  • Enum de tamaño de byte en Java
  • ¿Qué es una región no válida en Android?
  • Integración de una biblioteca Java externa externa y acceso a clases de Android en ella
  • Gradle falla: nodo no soportado 'item' en ids.xml
  • Detección de lanzamientos de actividades de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.