El teclado virtual de Android cubre el campo Editar texto

Respuestas:

163

¿Estás preguntando cómo controlar lo que es visible cuando se abre el teclado virtual? Es posible que desee jugar con el windowSoftInputMode . Vea los documentos del desarrollador para más discusión.

Cheryl Simon
fuente
2
Esto funciona bien, pero asegúrese de tener <item name = "android: windowIsFloating"> true </item> en su estilo de diálogo, en caso de que esté usando un estilo de diálogo personalizado.
Dmitry Chistyakov
Parece que esto no funciona en modo horizontal (Nexus 7), el elemento editable permanece oculto debajo del teclado. Intenté diferentes combinaciones de windowSoftInputMode. Parece que no puedo configurar windowIsFloating porque ActionBar no lo admitirá. ¿O también podría tener algo que ver con el hecho de que mi EditText está dentro del elemento de vista de lista?
Sampo Sarrala - codidact.org
Esto no funcionará después de agregar <item name = "android: windowTranslucentStatus"> true </item> en ellos. ¿Alguien arregla esto?
Max
1
@Max Agregue android:fitsSystemWindows="true"a su vista raíz para resolver esto.
David Passmore
1
¿Qué hay de tirar del diseño completo sobre el teclado cuando el teclado
virtual
162

Tuve los mismos problemas Prueba el siguiente código:

android:windowSoftInputMode="adjustPan"

agréguelo a su manifest.xml en la etiqueta de actividad de la actividad que contiene la entrada. ejemplo:

<activity
            android:name=".Activities.InputsActivity"
            ...
            android:windowSoftInputMode="adjustPan"
            />
Kuldeep Sakhiya
fuente
14
¡La respuesta más simple! Solo como una nota, esto debe agregarse en el archivo de Manifiesto y debajo de la actividad que queramos.
NRR
44
En mi caso, esto al menos no estropea mi html, como adjustResizelo haría, pero también cubre mis campos de entrada
Rahul Dole
8
Esto no me ayudó
vikifor
1
@vikifor, asegúrese de agregar su texto de edición en la vista de desplazamiento. Incluso si tiene solo 3-4 campos en su diseño, agregue todos sus campos en la vista de desplazamiento. Esto lo hace desplazable cuando se abre el teclado virtual.
Kuldeep Sakhiya
Funciona bien, pero cada vez que toco la vista EditText, el teclado se vuelve a dibujar.
Iqbal
55

Tuve el mismo problema donde el softkeyboard estaba en la parte superior de las vistas EditText que se colocaron en la parte inferior de la pantalla. Pude encontrar una solución agregando una sola línea a la actividad relevante de mi archivo AndroidManifest.xml.

android:windowSoftInputMode="adjustResize|stateHidden"

Así es como se ve toda la etiqueta de actividad:

<activity
        android:name="com.my.MainActivity"
        android:screenOrientation="portrait"
        android:label="@string/title_activity_main"
        android:windowSoftInputMode="adjustResize|stateHidden" >
    </activity>

Aquí el valor más importante es el ajuste de tamaño. Esto desplazará toda la interfaz de usuario hacia arriba para dar espacio al teclado virtual.

DanKodi
fuente
Pero esto puede estropear el aspecto de su html si su CSS tiene en su mayoría valores porcentuales
Rahul Dole
¿Estás adivinando aquí o lo intentaste? por cierto, no debería estropear tu html. He intentado con vistas web. Cambiará toda la vista, no elementos individuales.
DanKodi
1
Lo intenté. Creo que sucede porque mi CSS tiene en su mayoría valores porcentuales
Rahul Dole
@DanKodi Lo intenté adjustResize|stateHiddeny no hizo ninguna diferencia adjustPan.
IgorGanapolsky
25

¿Por qué no intentar agregar un ScrollView para envolver lo que sea que desee desplazar? Así es como lo hice, donde realmente dejo un encabezado en la parte superior que no se desplaza, mientras que los widgets de diálogo (en particular los EditTexts) se desplazan cuando abres el teclado virtual.

<LinearLayout android:id="@+id/HeaderLayout" >
  <!-- Here add a header or whatever will not be scrolled. -->
</LinearLayout>
<ScrollView android:id="@+id/MainForm" >
  <!-- Here add your edittexts or whatever will scroll. -->
</ScrollView>

Normalmente tendría un LinearLayout dentro de ScrollView, pero eso depende de usted. Además, configurar el estilo de la barra de desplazamiento como outsideInset ayuda, al menos en mis dispositivos.

zmilojko
fuente
44
Si bien la respuesta de Mayra es lo que todos deberían hacer (y probablemente lo que Google pensó que todos deberían hacer), esto es lo que termino haciendo casi siempre. Es la única forma de obtener el control real que se necesita para hacer que la pantalla sea correcta. Suspiro.
Scott Biggs
no subestimes el comentario de Scott. Es verdad. en mi caso, no quería cambiar el tamaño o desplazar mi vista de lista, pero quería tomar editText al final de esa lista. Entonces, puse editText en scrollView y funciona como se esperaba.
Darpan
15

Todo lo que necesitas hacer es

android:isScrollContainer="true"

fuente: http://www.davidwparker.com/2011/08/25/android-fixing-window-resize-and-scrolling/

Ekundayo Blessing Funminiyi
fuente
1
Si bien la respuesta en sí no me ayudó mucho (el atributo no era necesario), la fuente vinculada contiene la explicación completa (el formulario debe estar integrado en ScrollView). ¡Gracias!
johndodo
Del mismo modo, nada en la página me ayudó, pero el enlace mostraba agregar el ajuste de tamaño a la actividad windosSoftInputMode y funcionó.
steven smith
14

Perdón por revivir un hilo antiguo pero nadie mencionó la configuración android:imeOptions="flagNoFullscreen"en su elemento EditText

William Moffitt
fuente
7
android:windowSoftInputMode="adjustPan"
android:isScrollContainer="true"

funciona para Android EditText, mientras que no funciona para webview o xwalkview. Cuando el teclado virtual oculta la entrada en webview o xwalkview que ha utilizadoandroid:windowSoftInputMode="adjustResize"

Kris Roofe
fuente
4

Creo que puede hacer que se desplace utilizando el trackball, lo que podría lograrse mediante programación mediante métodos de selección eventualmente, pero es solo una idea. Sé que el método de trackball generalmente funciona, pero en cuanto a la forma exacta de hacerlo y hacerlo funcionar desde el código, no estoy seguro.
Espero que ayude.

Luis Miguel Serrano
fuente
Lo que creo que necesito es una forma de alargar la ventana "artificialmente" para que la vista pueda desplazarse. Actualmente, RelativeLayout está configurado para android: layout_width = "wrap_content" android: layout_height = "wrap_content"
Alexis
No sé de una solución entonces. Quizás desee ajustar manualmente los valores de ancho y alto para satisfacer sus necesidades, estirándolos aún más a lo que está resolviendo "wrap_content".
Luis Miguel Serrano
1

agregue esta línea única a su actividad relativa donde el teclado cubre editar el método de actividad text.inside onCreat ().

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
umesh shakya
fuente
0

Sé que esto es viejo, pero ninguna de las soluciones anteriores funcionó para mí. Después de una depuración extensa, descubrí el problema. La solución es establecer el android:windowTranslucentStatusatributo en falso en my styles.xml

Bestia77
fuente
0

Si el campo Editar texto está cubierto por el teclado, use el siguiente código:

    EditText= findViewById(R.id.edittext)
    EditText?.getParent()?.requestChildFocus(EditText,EditText)

Si desea que el Cursor esté en el Texto de edición enfocado, use EditText.requestFocus()después el EditText?.getParent()?.requestChildFocus(EditText,EditText) que ayuda a obtener el foco y el Cursor en el Texto de edición enfocado.

Sameer Tzar
fuente
-1

Edite su AndroidManifest.xml

android:windowSoftInputMode="adjustResize"

Agregue esto a su vista raíz del archivo de diseño.

android:fitsSystemWindows="true"

Eso es todo.

Ahamed Riswan
fuente