I used NestedScrollView with CoordinatorLayout to enable scroll animation for Toolbar (by app:layout_scrollFlags="scroll|enterAlways").
NestedScrollView contain the LinearLayout as the root child, I put the 2 TextViews into LinearLayout to enable expand/collapse animation. The one was set Visible and other one was set to Gone. And switching visibility by onClick event of LinearLayout
Normally, everything work as expected but when I scrolled the NestedScrollView the onClick event not working properly. I need double click after scroll to get expand/collapse animation
Does anyone have same problem with me ? Please help me
<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.v4.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="98dp"
android:paddingLeft="24dp"
android:paddingRight="24dp">
<android.support.v7.widget.AppCompatTextView
android:id="@+id/detail_expense_reason_trim"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="false"
android:textColor="@color/add_new_expense_text_color" />
<android.support.v7.widget.AppCompatTextView
android:id="@+id/detail_expense_reason"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:singleLine="false"
android:textColor="@color/add_new_expense_text_color"
android:visibility="gone" />
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/detail_expense_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.AppBarLayout>
@InjectView(R.id.detail_expense_reason)
AppCompatTextView originalReason;
@InjectView(R.id.detail_expense_reason_trim)
AppCompatTextView trimReason;
@InjectView(R.id.detail_expense_container)
LinearLayout expenseContainer;
// Handle event
public void onClick() {
if (originalReason.getVisibility() == View.VISIBLE) {
originalReason.setVisibility(View.GONE);
trimReason.setVisibility(View.VISIBLE);
} else {
originalReason.setVisibility(View.VISIBLE);
trimReason.setVisibility(View.GONE);
}
}
It is a bug of the NestedScrollView, the detail of the bug can be found in here: issue. The problem is that
mScroller.isFinished()
inonInterceptTouchEvent(MotionEvent ev)
will not returntrue
after a fling operation (even if the fling is stopped). Therefore the touch event is intercepted.This bug have been reported for a while, but still have not been fixed. So I have created by own version of bug fix for this problem. I implemented my own
NestedScrollView
, copied all the code fromNestedScrollView
and having the with the following amendments:And this
NestedScrollView
should have the same behaviour as the original one.I found solution for same problem on this thread :The item inside RecyclerView can't be clicked right after scrolling
You can fix your code by adding layout_behavior to your AppBarLayout.You can find code here Fixed AppBarLayout.Behavior .Just add this class tou your project and fix your code :
<android.support.design.widget.AppBarLayout android:layout_width="match_parent" app:layout_behavior="yourPackageName.FixAppBarLayoutBehavior" android:layout_height="wrap_content">
It is a
Bug
mention atGoogle #issues 194398
.Just need to use this
WorkaroundNestedScrollView.java
class which extendsNestedScrollView
like,WorkaroundNestedScrollView.java
And in yourlayout use it like this,
layout.xml
You can alson find more details here.
I met this problem too
and I change my xml file,change paddingTop to margin_top,then my top floating view's OnClick event will not be intercepted by NestedScrollView
Best solution :
1) Create this class :
2) And use in xml :
I've opened another issue here: https://issuetracker.google.com/issues/68103042 as it still seems to be an issue in Oreo for us (multiple devices, including emulators).
My fix (adapted from ta..@graymeter.com's suggestions at https://issuetracker.google.com/issues/37051723) doesn't require modifying AOSP code as it uses reflection: