Android no cambia el tamaño de mi diseño cuando hay un NestedScrollView en la jerarquía
Acabo de observar el siguiente comportamiento en mi Nexus 9 con Android 7.1.1 y Android Support Library 25.3.1.
Aquí está el diseño de mi actividad:
- Problema de superposición de sugerencias de TextInputLayout
- Biblioteca de soporte de diseño de Android: NavigationView código fuente
- Intentar invocar método virtual 'android.os.Handler android.support.v4.app.FragmentHostCallback.getHandler ()' en una referencia de objeto nulo
- Android support library v 23.3.0 problema con el bocadillo
- Vector Drawable no se puede cargar correctamente en Android API 19 con la ayuda de Support Library (23.4.0)
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:focusableInTouchMode="false" android:orientation="vertical" android:paddingBottom="4dp"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" /> <View android:layout_width="match_parent" android:layout_height="300dp" android:background="#fffaaa" /> <View android:id="@+id/view" android:layout_width="match_parent" android:layout_height="300dp" android:background="#bbbaaa" /> <View android:layout_width="match_parent" android:layout_height="10dp" android:background="#f00" /> </LinearLayout> </ScrollView>
Así es como se ve en la pantalla:
Cuando aparece el teclado en pantalla, el sistema cambia el tamaño de la disposición de mi actividad para que ocupe el espacio desde la parte superior de la pantalla hasta el teclado. Por favor, considere la línea roja discontinua en la captura de pantalla de abajo:
Sin embargo, cuando reemplazo el ScrollView
con un NestedScrollView
, el sistema no NestedScrollView
el tamaño del diseño:
Ahora la línea roja discontinua está debajo del teclado. El problema se puede android:windowSoftInputMode="adjustResize"
fácilmente aplicando android:windowSoftInputMode="adjustResize"
a la actividad:
La línea roja discontinua está sobre el teclado ahora. Mis preguntas son:
- ¿Por qué observo tal comportamiento?
- ¿Qué hay de malo con
NestedScrollView
?
- Android N se bloquea en TextAppearanceSpan
- AlertDialog bug contextual barra de acción en la Biblioteca de Soporte 22.2?
- Desactivar la hamburguesa para animar las flechas
- Cómo actualizar mis actividades a fragmentos y evitar ClassCastException?
- Android - aplicar selectableItemBackground en xml con soporte v7
- La imagen de Parallax no se muestra correctamente en la biblioteca de soporte 24.2.0
- Android - problemas para animar el icono de ActionBar de Fragments
- Configuración de Android Proguard para la v7 Support Library ActionBar
Los documentos Android dicen:
Cuando el método de entrada aparece en la pantalla, reduce la cantidad de espacio disponible para la interfaz de usuario de la aplicación. El sistema toma una decisión sobre cómo debe ajustar la parte visible de su interfaz de usuario, pero puede que no lo logre. Para asegurar el mejor comportamiento para su aplicación, debe especificar cómo desea que el sistema muestre su interfaz de usuario en el espacio restante.
Esto podría ser una instancia de la inestabilidad a la que se hace referencia.
Me parece que esto no es un problema con NestedScrollView
y ScrollView
pero es más un problema con cómo la actividad está ajustando la interfaz de usuario basada en el teclado. La única diferencia entre NestedScrollView
y ScrollView
es que NestedScrollView
tiene la capacidad de ser padre e hijo. Creo que esto destaca por qué debe seguir el consejo anterior donde dice:
Para asegurar el mejor comportamiento para su aplicación, debe especificar cómo desea que el sistema muestre su interfaz de usuario en el espacio restante.
Es decir, utilizando android:windowSoftInputMode="adjustResize"
siempre, en lugar de sólo cuando es necesario.
El problema aquí no es Nested Scroll-view, el problema es el ajuste automático de Android de la vista cuando el teclado aparece / desaparece en la llamada del método de entrada. Espero que entienda el problema en el siguiente enlace:
https://developer.android.com/training/keyboard-input/visibility.html
- Compartir la información de "errores de bloqueo" de Android Market con los desarrolladores
- ¿Cómo analizar un archivo Android /data/anr/traces.txt?