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:

<?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:

Introduzca aquí la descripción de la imagen

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:

Introduzca aquí la descripción de la imagen

Sin embargo, cuando reemplazo el ScrollView con un NestedScrollView , el sistema no NestedScrollView el tamaño del diseño:

Introduzca aquí la descripción de la imagen

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:

Introduzca aquí la descripción de la imagen

La línea roja discontinua está sobre el teclado ahora. Mis preguntas son:

  1. ¿Por qué observo tal comportamiento?
  2. ¿Qué hay de malo con NestedScrollView ?

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

  • SetTint DrawableCompat no funciona en la API 19
  • Implicado Z-Ordenando Para ViewPagers
  • ¿Por qué AOSP agrega nuevas API para admitir bibliotecas sin agregarlas al SDK?
  • El uso de buildToolsVersion 23 falla porque varios archivos dex definen 'AnimRes'
  • Vista inferior de navegación en la animación de la biblioteca de soporte v25.0.0?
  • Android: Vista inferior de navegación - cambia el icono del elemento seleccionado
  • GetSupportActionBar () devuelve null con Robolectric
  • Error: java.lang.NullPointerException en android.support.v4.content.Loader
  • No se puede convertir en LayerDrawable (después de actualizar v7)
  • Fragmentos anidados getchildfragmentmanager causando un bloqueo
  • ¿Cómo agregar un proyecto de biblioteca externa a Android Studio 1.2.2? Con solución
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.