Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scroll doesn't work in NestedScrollView when try to scroll from views with click events

I'm using a NestedScrollView in a layout, and am attempting to use the new CoordinatorLayout from the design support library for CollapsingToolbarLayout.

My layout file looks like this:

<?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout 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="match_parent">      <android.support.design.widget.AppBarLayout         android:id="@+id/appbar"         android:layout_width="match_parent"         android:layout_height="200dp"         android:fitsSystemWindows="true"         android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">          <android.support.design.widget.CollapsingToolbarLayout             android:id="@+id/collapsing_toolbar"             android:layout_width="match_parent"             android:layout_height="wrap_content"             android:fitsSystemWindows="true"             app:contentScrim="?attr/colorPrimary"              app:expandedTitleMarginStart="48dp"             app:layout_scrollFlags="scroll|exitUntilCollapsed">             <!--            app:expandedTitleMarginEnd="64dp"-->             <ImageView                 android:layout_width="match_parent"                 android:layout_height="200dp"                 android:scaleType="centerCrop"                 android:src="@drawable/image_load_default_big" />              <android.support.v7.widget.Toolbar                 android:id="@+id/anim_toolbar"                 android:layout_width="match_parent"                 android:layout_height="?attr/actionBarSize"                 app:layout_collapseMode="pin"                 app:popupTheme="@style/ThemeOverlay.AppCompat.Light">             </android.support.v7.widget.Toolbar>          </android.support.design.widget.CollapsingToolbarLayout>      </android.support.design.widget.AppBarLayout>      <android.support.v4.widget.NestedScrollView         android:id="@+id/nestedScrollVw"         android:layout_width="match_parent"         android:layout_height="match_parent"         app:layout_scrollFlags="scroll|enterAlways"         android:fitsSystemWindows="true"         app:layout_behavior="@string/appbar_scrolling_view_behavior">          <RelativeLayout             android:layout_width="match_parent"             android:layout_height="match_parent"             android:clickable="false"             android:fitsSystemWindows="true">              <LinearLayout                 android:id="@+id/changePasswordButtonContainer"                 android:layout_width="match_parent"                 android:layout_height="wrap_content"                 android:orientation="vertical">                  <Button                     android:id="@+id/changePasswordExpand"                     android:layout_width="match_parent"                     android:layout_height="55dp"                     android:background="@drawable/back_img"                     android:text="Change Your Password"                     android:textColor="@color/white"                     android:textStyle="bold" />             </LinearLayout>               <LinearLayout                 android:id="@+id/changePasswordContainer"                 android:layout_width="match_parent"                 android:layout_height="wrap_content"                 android:layout_below="@id/changePasswordButtonContainer"                 android:layout_centerInParent="true"                 android:orientation="vertical"                 android:padding="10dp">                   <TextView                     android:layout_width="wrap_content"                     android:layout_height="wrap_content"                     android:layout_gravity="center_horizontal"                     android:text="Edit Your Password"                     android:textColor="@color/orange" />                  <EditText                     android:id="@+id/etUserName"                     android:layout_width="match_parent"                     android:layout_height="wrap_content"                     android:layout_marginTop="10dp"                     android:background="@drawable/edittext_default_bg"                     android:drawableLeft="@drawable/password_icon"                     android:drawableRight="@drawable/tick"                     android:hint=" Old Password"                     android:padding="12dp"                     android:password="true"                     android:textColorHint="#b5b5b5" />                  <EditText                     android:id="@+id/etPass"                     android:layout_width="match_parent"                     android:layout_height="wrap_content"                     android:layout_marginTop="10dp"                     android:background="@drawable/edittext_default_bg"                     android:drawableLeft="@drawable/password_icon"                     android:drawableRight="@drawable/cross"                     android:hint=" New Password"                     android:padding="12dp"                     android:password="true"                     android:textColorHint="#b5b5b5" />                  <RadioButton                     android:layout_width="wrap_content"                     android:layout_height="wrap_content"                     android:paddingBottom="20dp"                     android:paddingTop="20dp"                     android:text="show password" />                  <Button                     android:id="@+id/btnSingIn"                     android:layout_width="match_parent"                     android:layout_height="wrap_content"                     android:layout_margin="4dp"                     android:background="@drawable/login_button_background"                     android:paddingBottom="8dp"                     android:paddingTop="8dp"                     android:text="Done"                     android:textColor="@color/white"                     android:textStyle="bold" />             </LinearLayout>              <LinearLayout                 android:id="@+id/dealerToDealerContainer"                 android:layout_width="match_parent"                 android:layout_height="wrap_content"                 android:layout_below="@+id/changePasswordContainer"                 android:orientation="vertical">                  <Button                     android:id="@+id/dealerToDealerExpand"                     android:layout_width="match_parent"                     android:layout_height="55dp"                     android:background="@drawable/back_img"                     android:text="Dealer To Dealer Platform No"                     android:textColor="@color/white"                     android:textStyle="bold" />             </LinearLayout>              <LinearLayout                 android:layout_width="match_parent"                 android:layout_height="wrap_content"                 android:layout_below="@id/dealerToDealerContainer"                 android:layout_centerInParent="true"                 android:orientation="vertical"                 android:padding="10dp">                   <TextView                     android:layout_width="wrap_content"                     android:layout_height="wrap_content"                     android:layout_gravity="center_horizontal"                     android:text="Edit Number"                     android:textColor="@color/orange" />                  <EditText                     android:id="@+id/dealerToDealerNo"                     android:layout_width="match_parent"                     android:layout_height="wrap_content"                     android:layout_marginTop="10dp"                     android:background="@drawable/edittext_default_bg"                     android:drawableLeft="@drawable/password_icon"                     android:drawableRight="@drawable/tick"                     android:hint=" 56546789"                     android:padding="12dp"                     android:password="true"                     android:textColorHint="#b5b5b5" />                  <Button                     android:id="@+id/dealerToDealerNoDone"                     android:layout_width="match_parent"                     android:layout_height="wrap_content"                     android:layout_margin="4dp"                     android:background="@drawable/login_button_background"                     android:paddingBottom="8dp"                     android:paddingTop="8dp"                     android:text="Done"                     android:textColor="@color/white"                     android:textStyle="bold" />             </LinearLayout>          </RelativeLayout>     </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout> 

When i try to scroll, sometimes it doesn't work. reason for this is, other elements of layout with click events are consuming the touch event. Basically EditText, RadioButton, Button are consuming touch events. Any Suggestions to solve this problem ?

like image 593
Arun Avatar asked Jun 30 '15 11:06

Arun


People also ask

Is nested scrolling enabled?

NestedScrollView is just like ScrollView, but it supports acting as both a nested scrolling parent and child on both new and old versions of Android. It is enabled by default. NestedScrollView is used when there is a need for a scrolling view inside another scrolling view.

What is difference between nested ScrollView and NestedScrollView?

Nested scrolling is enabled by default. Show activity on this post. NestedScrollView is just like ScrollView, but in NestedScrollView we can put other scrolling views as child of it, e.g. RecyclerView. But if we put RecyclerView inside NestedScrollView, RecyclerView's smooth scrolling is disturbed.

How do I use NestedScrollView with ConstraintLayout and RecyclerView?

Just add the fillViewPort parameter to your NestedScrollView . Like that the ConstraintLayout will expand just as you'd set its width to match_parent and the RecyclerView will dynamically expand its size.


1 Answers

I had the same problem. It happens only when NestedScrollView content height is less than height of device screen. So the workaround is to use setMinimumHeight(..) method for the view inside your NestedScrollView to make it resize to screen height:

DisplayMetrics displaymetrics = new DisplayMetrics(); getBaseActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int screenHeight = displaymetrics.heightPixels;  int actionBarHeight = 0; TypedValue tv = new TypedValue(); if (getBaseActivity().getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true)) {     actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics()); }  view.setMinimumHeight(screenHeight - actionBarHeight); 

where view is your RelativeLayout

It works fine fore me. Hope it helps you

like image 127
smbd uknow Avatar answered Oct 12 '22 13:10

smbd uknow