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"/>