Me gustaría ajustar / cambiar el tamaño del diseño cuando se activa el teclado virtual, como se muestra a continuación:
Antes y después de:
Encontramos recursos de pareja en SO:
- Cómo mantener todos los campos y textos visibles mientras se muestra el teclado virtual
- el teclado suave de Android estropea el diseño cuando aparece
- Ajuste el diseño cuando el teclado virtual está activado
Pero las preguntas y respuestas son bastante ambiguas, aquí está la pregunta con una imagen más clara de lo que quiero.
Requisitos:
- Debería funcionar en teléfonos con cualquier tamaño de pantalla.
- Noté que el espacio de margen / relleno en "FACEBOOK" y "Registrarse en Facebook" ha cambiado antes y después.
- No hay vista de desplazamiento involucrada.
Theme.AppCompat.Light.NoActionBar.FullScreen
), según esta respuesta -> stackoverflow.com/a/7509285/1307690Respuestas:
Solo agrega
en su AndroidManifest.xml donde declara esta actividad en particular y esto ajustará la opción de cambio de tamaño del diseño.
algún código fuente a continuación para el diseño del diseño
fuente
Esta pregunta se hizo hace unos años y "Secret Andro Geni" tiene una buena explicación básica y "tir38" también hizo un buen intento de encontrar la solución completa, pero lamentablemente no hay una solución completa publicada aquí. He pasado un par de horas resolviendo cosas y aquí está mi solución completa con una explicación detallada en la parte inferior:
Y en AndroidManifest.xml , no olvide configurar:
en la
<activity>
etiqueta que desea tal diseño.Pensamientos:
Me di cuenta de que
RelativeLayout
son los diseños que abarcan todo el espacio disponible y luego se redimensionan cuando aparece el teclado.Y
LinearLayout
son diseños que no cambian de tamaño en el proceso de cambio de tamaño.Es por eso que necesita tener 1
RelativeLayout
inmediatamente despuésScrollView
para abarcar todo el espacio de pantalla disponible. Y debe tener unLinearLayout
interior, de loRelativeLayout
contrario, su interior se aplastará cuando ocurra el cambio de tamaño. Un buen ejemplo es "headerLayout". Si no hubiera unLinearLayout
interior, eseRelativeLayout
texto de "facebook" se aplastaría y no se mostraría.En las imágenes de inicio de sesión de "Facebook" publicadas en la pregunta, también noté que toda la parte de inicio de sesión (mainLayout) está centrada verticalmente en relación con toda la pantalla, de ahí el atributo:
en el
LinearLayout
diseño. Y debido a que mainLayout está dentro de un,LinearLayout
esto significa que esa parte no cambia de tamaño (nuevamente vea la imagen en cuestión).fuente
android:layout_alignParentBottom="true"
. Esto hace que se pegue al fondo.android:layout_marginBottom="15dp"
a footerLayout y luego RelativeLayout que está sosteniendo textView2 y HelpButton . En ambos casos, helpButton se aplasta (incluso sin el atributo marginBottom). De ninguna manera editText1 o editText2 se aplastan, porque están dentro de un LinearLayout . ¿ Tal vez estableciste margen en cualquier otro diseño (no solo pie de página )? ¡Pruebe desde cero si no llega a ninguna parte! También puedes jugar conandroid:windowSoftInputMode
atributo en AndroidManifest.Agregue esta línea en su manifiesto donde se llama su actividad
o
puedes agregar esta línea en tu
onCreate
fuente
adjustPan
yadjustResize
. Estos son modos diferentes. Lea más sobre ellos aquí: stackoverflow.com/a/17410528/1738090 Y aquí: developer.android.com/guide/topics/manifest/activity-elementEl desarrollador de Android tiene la respuesta correcta, pero el código fuente proporcionado es bastante detallado y en realidad no implementa el patrón descrito en el diagrama.
Aquí hay una mejor plantilla:
Depende de usted decidir qué vistas usar para las partes de "desplazamiento" y "pie de página". También sepa que probablemente tenga que configurar
ScrollView
s fillViewPort .fuente
LinearLayout
s en lugar de Frame y Relative, pero todas las vistas todavía están una encima de la otra.Puede funcionar para todo tipo de diseño.
por ejemplo:
y
por ejemplo:
fuente
Esto permite mostrar cualquier diseño deseado previamente oculto por el teclado.
Agregue esto a la etiqueta de actividad en AndroidManifest.xml
Rodee su vista raíz con un ScrollView, preferiblemente con scrollbars = none. ScrollView correctamente no cambiará nada con su diseño, excepto para ser utilizado para resolver este problema.
Y luego establezca fitsSystemWindows = "true" en la vista que desea que se muestre completamente sobre el teclado. Esto hará que su EditText sea visible sobre el teclado y permitirá desplazarse hacia abajo a las partes debajo de EditText pero en la vista con fitsSystemWindows = "true".
Por ejemplo:
Si desea mostrar la parte completa de la vista fitsSystemWindows = "true" sobre el teclado en el momento en que aparece el teclado, necesitará un código para desplazar la vista hacia abajo:
Ejemplo de diseño completo:
fuente
android:fitsSystemWindows="true"
es lo que me dio los resultados deseados que quería ... graciasPara aquellos que usan ConstraintLayout ,
android:windowSoftInputMode="adjustPan|adjustResize"
no funcionará.Lo que puede hacer es usar un oyente de teclado suave , establecer restricciones de las vistas de abajo a abajo de las vistas superiores, luego establecer un sesgo vertical para cada vista (como un porcentaje posicional entre restricciones) a una guía horizontal (también posicionado por porcentaje , pero a los padres).
Para cada vista, solo necesitamos cambiar
app:layout_constraintBottom_toBottomOf
a@+id/guideline
cuando se muestra el teclado , programáticamente, por supuesto.En general, un teclado suave no ocupa más del 50% de la altura de la pantalla. Por lo tanto, puede establecer la directriz en 0.5.
Ahora mediante programación, cuando no se muestra el teclado , podemos configurar todo el
app:layout_constraintBottom_toBottomOf
reverso a padre, viceversa.Llama a este método:
Lo importante es asegurarse de establecer el sesgo vertical de manera que se pueda escalar correctamente cuando el teclado se muestra y no se muestra.
fuente
Muchas respuestas son correctas. En
AndroidManifest
escribí:En mi caso, agregué un tema
styles.xml
, pero puedes usar el tuyo:Me di cuenta de que si uso el tema de pantalla completa, no se cambia el tamaño:
También en mi caso
adjustResize
funciona, peroadjustPan
no funciona.Para los diseños de pantalla completa, consulte una solución alternativa en Android Cómo ajustar el diseño en el modo de pantalla completa cuando el teclado virtual está visible o en https://gist.github.com/grennis/2e3cd5f7a9238c59861015ce0a7c5584 .
También https://medium.com/@sandeeptengale/problem-solved-3-android-full-screen-view-translucent-scrollview-adjustresize-keyboard-b0547c7ced32 funciona, pero su StatusBar es transparente, por lo que la batería, el reloj, Wi- Los íconos de Fi son visibles.
Si crea una actividad con Archivo> Nuevo> Actividad> Actividad de pantalla completa, donde se usa el código:
tampoco lograrás un resultado. Puede usar
android:fitsSystemWindows="true"
en un contenedor raíz, pero aparece StatusBar. Así que usa soluciones alternativas desde el primer enlace.fuente
En mi caso ayudó.
main_layout.xml
Use esto en el
manifest
archivoAhora la parte más importante! Uso tema como éste, ya sea en
Activity
oApplication
etiqueta.Y el tema toma así
Entonces me faltaba el tema. Lo que me hizo sentir frustrado todo el día.
fuente
Simplemente puede configurar estas opciones en el archivo AndroidManifest.xml.
El uso de
adjustPan
No es recomendado por Google, ya que el usuario puede necesitar para cerrar el teclado para ver todos los campos de entrada.Más información: Manifiesto de la aplicación de Android
fuente
Para mí funcionó con esta línea de código:
Simplemente póngalo en el método onCreate. ¡Mejor!
fuente
Agregue esta línea en el archivo de manifiesto:
fuente
Uso este marco de clase extendido Y cuando necesito volver a calcular el tamaño de la altura en Layout, anulo la medida y resto keyboardHeight usando getKeyboardHeight ()
Mi marco de creación que necesita cambiar el tamaño con softkeyboard
SizeNotifierFrameLayout
fuente
Este código me funciona. Cuando aparece el teclado, puede desplazarse por la pantalla
En AndroidManifest.xml
activity_sign_up.xml
rounded_border_edittext.xml
btn_blue_selector.xml
fuente
En Xamarin regístrate debajo del código en tu actividad
Utilicé un diseño relativo si está utilizando el diseño de restricción, el código anterior funcionará a continuación
fuente