vertical studio recyclerview inside entre ejemplo diferencia android nestedscrollview

android - studio - NestedScrollView se desplaza hacia abajo cuando el contenido se llena



scroll vertical android studio (3)

Esto funciona para mí:

mNestedScrollViewChat.post(new Runnable(){ @Override public void run(){ mNestedScrollViewChat.fullScroll(View.FOCUS_DOWN); } });

Tengo xml, que DrawerLayout de DrawerLayout , CoordinatorLayout con custom views , AppBarLayout , NestedScrollView .

Problema: cuando el contenido de NestedtScrollView llena, NestedtScrollView desplaza hacia abajo. Todas las investigaciones como scrollView.setScrollY(0) o la clase personalizada de layout_behavior = FixedScrollingViewBehavior no me ayudaron.

¿Cómo evito este desplazamiento?

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/drawer" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_content" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:fitsSystemWindows="true" android:background="@color/semitransparet_color_primary"> <android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/actionbar_toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" android:minHeight="?attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways" app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:elevation="4dp"/> </android.support.design.widget.AppBarLayout> <ProgressBar android:id="@+id/progress" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"/> <android.support.v4.widget.NestedScrollView android:id="@+id/product_scroll_wrpr" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="gone"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> // my content is here </LinearLayout> </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout> <LinearLayout android:id="@+id/buttons_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="gone" android:background="#01579B" android:layout_gravity="bottom" android:orientation="horizontal" android:padding="8dp" android:gravity="center_vertical"> // here are my buttons </LinearLayout> <android.support.design.widget.NavigationView android:id="@+id/navi" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" android:background="@android:color/white" app:headerLayout="@layout/drawer_header_left" app:menu="@menu/nav_drawer_menu"/>

mi build.gradle consta

compile ''com.android.support:support-v4:23.1.0'' compile ''com.android.support:design:23.0.1''


Intente configurar android:descendantFocusability="blocksDescendants" en LinearLayout dentro de NestedScrollView . Esto funciona para mi.

UPD: tenga cuidado de usar en el diseño elementos descendientes como EditText , que deberían enfocarse: esos elementos no se enfocarán. Si sabe cómo resolver esto, háganoslo saber.


Una alternativa para bloquear el foco es agregar una nueva Vista que robe el foco. Póngalo en cualquier lugar encima de NestedScrollView, y debería funcionar:

<!--focusStealer, to avoid NestedScrollingView to scroll due to dynamically created views that take the focus--> <View android:layout_width="0px" android:layout_height="0px" android:focusable="true" android:focusableInTouchMode="true"/>