2010-12-02 19 views
186

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

Supongo que esto se puede lograr utilizando el método 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 añadir: la vista a la entrada que va no es un TextView (es un View con una costumbre InputConnection aplicación), por lo android:imeOptions="flagNoExtractUi" no funcionará aquí.

+0

Intentemos verlo. Es bueno para ti. [Mira a éste] [1] [1]: i http://stackoverflow.com/questions/8648401/how-to-open-only-half-keyboard-in-landscape-mode – sonida

+0

tiene un problema similar :(¿podría tener alguna idea? http://stackoverflow.com/questions/36914290/android-soft-keyboard-in-a-fullscreen-surface-view – railwanderer

+2

cómo aplicar esto en toda la aplicación. no van a agregar el valor de atributo en cada texto de edición en xml. –

Respuesta

146

I finalmente respondido a mi propia pregunta:

La interfaz de usuario de extracto (es decir, el modo de edición de pantalla completa) se puede desactivar en el punto en el que está conectada la conexión de entrada:

@Override 
public InputConnection onCreateInputConnection(EditorInfo outAttrs) { 

    outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI; 

    // etc. 
} 
+169

simplemente inserte el archivo xml android: imeOptions = "flagNoExtractUi" –

+1

jnic, ¿dónde lo hizo que sobrescribió en el código del teclado virtual? SoftKeyboard.java? Probé la misma anulación y error. –

+0

hey jnic. Lo estoy haciendo de la misma manera, pero no funciona para mí .. sigo siendo g etting vista de edición de teclado a pantalla completa. – Swati

44

El respuesta anterior me ayudó a entender la solución para EditTexts agregados dinámicamente:

editText.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI); 
80

para hacer eso simplemente navegar a la actividad xml y pegar android:imeOptions="flagNoExtractUi" en su código. Hmm, bastante simple, pero, ¿dónde debería pegarse? Tener vistazo a código de ejemplo, la actividad de XML y mirar EditarTexto:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"   
    > 

    <EditText 
     android:imeOptions="flagNoExtractUi" 
     android:id="@+id/etTextInAct" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" > 
     <requestFocus /> 
    </EditText> 

</LinearLayout> 

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

7

Si está modificando el IME directamente se puede evitar que cada vez se presentan un ExtractedView anulando onUpdateExtractingVisibility:

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

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

+1

Esta respuesta es demasiado corta y no cumple con los estándares de calidad de SO. Por favor, mejore añadiendo algunas explicaciones adicionales, para que sea útil para la comunidad y no solo para el OP. –

+26

@LorenzoDonati es exactamente lo que tienes que hacer ... es una respuesta muy simple porque la solución es muy simple y es solo una manera diferente de hacerlo que las respuestas anteriores. Además, las respuestas no pueden ser "demasiado cortas" a menos que no respondan la pregunta, OMI. –

+1

Lo sentimos, pero esto no es lo que la comunidad SO piensa al respecto. Las respuestas no deben limitarse a resolver el problema del PO, sino que deben ser excelentes respuestas en general. Ver [esto] (http://meta.stackexchange.com/a/138740/232931) y [esto] (http://meta.stackexchange.com/a/156951/232931), por ejemplo. –

28

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

+1

buen enfoque y mejor para escribir en xml. Funciona para mi. Gracias –

+1

esta respuesta solo funciona .. no vayan otros .. –

9

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

Por ejemplo, con el fin de desactivar la vista de edición de pantalla completa en el paisaje y reemplazar tecla "siguiente" por "OK" (ACTION_DONE) en el teclado, se puede utilizar:

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

que puede utilizar:

android:imeOptions="flagNoFullscreen" 

en su EditarTexto

+1

¿Esto es una respuesta? –

+0

¡Lo intento y funciona para mí! (Mi dispositivo es Android 4.1.2) – Thientvse

0

sé que es un poco tarde, pero para cualquier persona que todavía está interesado, aquí está mi solución: en mi caso tuve un paisaje Actividad que contiene un EditarTexto en la parte superior de la misma y que necesitaba para implementar la característica de autocompletar en esta búsqueda Actividad, que el teclado solapamiento causado un problema que el usuario no puede ver resultado de RecyclerView. Así que terminamos teniendo este EditarTexto en mi diseño:

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="?actionBarSize" 
    android:id="@+id/main_search_et" 
    android:imeOptions="actionSearch|flagNoExtractUi" 
    android:inputType="text" /> 

Salud!

Cuestiones relacionadas