NestedScrollView (NSV) en CoordinatorLayout (CL): NSV no en la parte superior cuando se carga

Estoy utilizando un NSV en un CL para la capacidad de tener la barra de herramientas de compresión cuando el NSV se desplaza hacia abajo. El problema que tengo es que mi NSV no se desplaza a la parte superior cuando se carga, en su lugar, se desplaza desde la parte superior de la NSV por un margen bastante (no estoy seguro de dónde viene este espaciamiento, no está en El diseño).

Por favor, eche un vistazo a las capturas de pantalla, la primera muestra cómo las cargas NSV y se puede ver claramente el NSV ha desplazado un poco de la parte superior mediante la comparación de la segunda (cuando se desplaza el NSV a la parte superior manualmente):

When NSV loads, it's not at the top NSV scrolled to the top manually for comparison sake

Hice algunas actualizaciones a esta disposición y causó esto para ocurrir, previamente, cargó en la tapa sin el problema. Sin embargo, no agregué ningún espacio que debería haber causado esto.

Aquí está el diseño que estoy usando para esto:

<android.support.design.widget.CoordinatorLayout android:id="@+id/cl_goal_detail" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> <android.support.design.widget.AppBarLayout android:id="@+id/abl_goal_detail" android:layout_width="match_parent" android:layout_height="144dp" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar_goal_detail" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/content_space_double" app:collapsedTitleTextAppearance="@style/title.dark" app:expandedTitleTextAppearance="@style/display3.plus.dark" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar_goal_detail" style="@style/toolbar" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:id="@+id/nsv_goal_detail" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/content_space_half" android:paddingLeft="@dimen/content_space_half" android:paddingRight="@dimen/content_space_half" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <FrameLayout android:id="@+id/container_goal_detail" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="fill_vertical"/> </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout> 

¡Cualquier idea sería apreciada!

4 Solutions collect form web for “NestedScrollView (NSV) en CoordinatorLayout (CL): NSV no en la parte superior cuando se carga”

¡DE ACUERDO! Después de un sólido DÍA de depuración de cada componente de mi diseño y fragmento Identificé lo que creo que es un error.

En primer lugar, el problema: resulta que tener elementos en la vista secundaria de NSV que cambian la visibilidad de View.GONE durante el tiempo de ejecución están haciendo que la lista se desplace hacia abajo. Me di cuenta de que la lista se desplaza justo por encima del elemento donde se ha cambiado la visibilidad (incluidos los márgenes establecidos en la vista).

En segundo lugar, la solución: arreglé este problema estableciendo todas las vistas para tener android: visibility = "ido" en el diseño xml, entonces, cambiar la visibilidad de cada vista según sea necesario. Anteriormente, las vistas eran visibles por defecto y luego trabajé desde allí. Sólo necesitaba cambiar mi lógica para empezar con todos los GONE, no terriblemente difícil.

Supongo que esto funciona porque las vistas que va a ocultar en tiempo de ejecución no forman parte del cálculo de altura total cuando se crea NSV en onCreateView (). Una vez que el fragmento progresa pasado onCreateView () es seguro cambiar dinámicamente las vistas, sin embargo, si las vistas se calculan como parte como la altura en onCreateView () y luego ocultos con View.GONE, las medidas vayan wonky y terminan con una lista Bajó significativamente.

¿Ha intentado agregar la siguiente línea en su viewgroup es decir FrameLayout en su caso

 android:descendantFocusability="blocksDescendants" 

Creo que esto también funcionará para usted.

Si no lo intenta agregar en NSV.

En mi caso, había un EditText cerca de la parte inferior de mi contenido de desplazamiento que estaba agarrando el foco. Desde NestedScrollView hace algunas cosas de diseño extraño, la vista enfocada no se desplaza a la parte superior cuando la actividad comenzó, por lo que la causa real no era evidente. Agregar esto al diseño secundario de NestedScrollView lo arregló para mí:

 android:focusableInTouchMode="true" 

Tu respuesta post me ayudó mucho a descubrir mi problema (por cierto, era lo mismo). Pero lo hice funcionar de una manera diferente. Supongo que estás usando un RecyclerView . En mi caso estoy usando 3 RecyclerViews . Bueno, de su respuesta empecé a esconder a los recicladores y descubrí que sólo uno de ellos estaba causando este problema. Lo que hice fue llenarlo con un postDelayed:

 new Handler().postDelayed(new Runnable() { @Override public void run() { recyler.setLayoutManager(new LinearLayoutManager(getApplicationContext())); recyler.setAdapter(new MyAdapter(myList)); } }, 3000); 

Eso funcionó bien!

  • Android: ¿Cómo puedo añadir un pie de página a una vista de pantalla completa?
  • Ajusta scrollview cuando el teclado está hacia arriba
  • ¿Cómo cambiar el tamaño del contenido de una webview en android?
  • Pestañas de Acción
  • Gestión de eventos táctiles en ScrollView Android
  • ScrollView distrubing ListView dentro de LinearLayout
  • Ejecutar comandos de shell y obtener resultados en un TextView
  • Android: Notificar a Scrollview que el tamaño de su hijo ha cambiado: ¿cómo?
  • establecer el enfoque en la parte superior de scrollview después de una acción que sucede android
  • Uso de RelativeLayout dentro de ScrollView no se produce en desplazamiento
  • Desplazar una vista / disposición oculta desde abajo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.