¿Desactivando la vista de edición a pantalla completa para la entrada del teclado virtual en el paisaje?

En los dispositivos Android que usan teclados suaves, quiero evitar que aparezca la vista de edición del teclado a pantalla completa (que se muestra a continuación) cuando esté en modo apaisado (es decir, quiero ver solo el teclado y la vista detrás de él).

Supongo que esto se puede lograr utilizando el setExtractViewShown(false) en InputMethodService , pero no puedo acceder a la instancia predeterminada de esto y no quiero implementar un método de entrada personalizado.

Android fullscreen editing view

Editado para agregar: la vista a la que se dirige la entrada no es una vista de TextView (es una View con una implementación personalizada de InputConnection ), por lo que android:imeOptions="flagNoExtractUi" no funcionará aquí.

Finalmente respondí mi propia pregunta:

La UI de extracción (es decir, el modo de edición de pantalla completa) se puede deshabilitar en el punto en el que se conecta la conexión de entrada:

 @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI; // etc. } 

Para hacerlo simplemente navegue a activity xml y pegue android:imeOptions="flagNoExtractUi" en su código. Hmm, bastante simple, pero, ¿dónde debería pegarse? Mira el código del ejemplo de actividad xml y mira EditText:

       

Si desea más opciones de personalización para el teclado, consulte http://developer.android.com/guide/topics/ui/controls/text.html

agregue la propiedad android:imeOptions="flagNoExtractUi" a cada EditText en su archivo XML .

La respuesta anterior me ayudó a encontrar la solución para EditTexts añadidos dinámicamente:

 editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); 

Use android:imeOptions="flagNoFullscreen" para lograr esa función.

Además, si desea combinar múltiples imeOptions programáticamente, puede usar el | syntax.

Por ejemplo, para deshabilitar la vista de edición de pantalla completa en el paisaje y reemplazar la tecla “Siguiente” por “OK” (ACTION_DONE) en el teclado, puede usar:

 editText.setImeOptions(EditorInfo.IME_ACTION_DONE | EditorInfo.IME_FLAG_NO_EXTRACT_UI); 

Si está modificando el IME directamente, puede evitar que muestre alguna vez un ExtractedView anulando onUpdateExtractingVisibility :

 @Override public void onUpdateExtractingVisibility(EditorInfo ei) { ei.imeOptions |= EditorInfo.IME_FLAG_NO_EXTRACT_UI; super.onUpdateExtractingVisibility(ei); } 

Sé que es un poco tarde, pero para cualquiera que esté interesado, esta es mi solución: en mi caso, tenía una actividad de paisaje que contenía un texto EditText y necesitaba implementar la característica de autocompletar en esta actividad de búsqueda, que superponía el teclado causó un problema que el usuario no pudo ver como resultado de RecyclerView . Así que terminé teniendo este EditText en mi diseño:

  

¡Aclamaciones!

Puedes usar :

 android:imeOptions="flagNoFullscreen" 

en tu texto de edición

Puede llamar para ocultar el teclado virtual y borrar el enfoque de la vista de búsqueda.

 public void hideKeyboard(View view) { InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), 0); } super.clearFocus();