BottomSheet will fly away with a change in visibility

I have a bottom sheet with a NestedScrollView inside (see below). When I press the FAB button, I want to make some parts of this NestedScrollView invisible. But when I change some linearized visibilities to GONE, the bottom sheet flies from the top. See here:

enter image description here

You can get all the code from https://github.com/Tanrikut/BottomSheetExample

My change visibility method:

private void changeVisibility() { subtitleLayout.setVisibility(View.GONE); coordinateLayout.setVisibility(View.GONE); timeLayout.setVisibility(View.GONE); } 

My NestedScrollView xml:

 <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" app:behavior_peekHeight="120dp" app:layout_behavior="android.support.design.widget.BottomSheetBehavior" android:id="@+id/bottom_sheet_main"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="28dp" android:background="@android:color/white" android:animateLayoutChanges="true" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:paddingLeft="10dp" android:paddingStart="10dp" android:paddingTop="@dimen/activity_horizontal_margin"> <TextView style="@style/TextAppearance.AppCompat.Headline" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Dandelion Chocolate" android:id="@+id/title" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/activity_horizontal_margin" android:layout_marginTop="16dp" android:orientation="horizontal" android:id="@+id/subtitleLayout"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/subtitle" android:text="Subtitle" /> </LinearLayout> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="@dimen/activity_horizontal_margin" android:id="@+id/coordinateLayout"> <ImageButton android:layout_width="24dp" android:layout_height="24dp" android:alpha="0.36" android:src="@drawable/ic_room_24dp" android:background="@null" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/activity_horizontal_margin" android:layout_marginStart="@dimen/activity_horizontal_margin" android:text="740, Valencia St, San Francisco, CA" android:textColor="@android:color/primary_text_light" android:id="@+id/bottom_sheet_coordinate" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="@dimen/activity_horizontal_margin" android:id="@+id/timeLayout"> <ImageButton android:layout_width="24dp" android:layout_height="24dp" android:alpha="0.36" android:src="@drawable/ic_query_builder_24dp" android:background="@null" /> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/activity_horizontal_margin" android:layout_marginStart="@dimen/activity_horizontal_margin" android:text="Wed, 10 AM - 9 PM" android:textColor="@android:color/primary_text_light" android:id="@+id/bottom_sheet_time" /> </LinearLayout> </LinearLayout> </FrameLayout> </android.support.v4.widget.NestedScrollView> 
+10
source share
4 answers

I came across this, it took some time to figure out what was the reason.

This is because you are using android: animateLayoutChanges, on which an error occurs in the BottomSheetBehavior or CoordinatorLayout method.

Delete it and the BottomSheet will stop animating on its own when it shouldn't. Not a fix, but a workaround at least.

-

Update:

It turns out that if you enable "animateLayoutChanges" programmatically by setting the LayoutTransition instance to use, you can set a flag on it that will prevent it from being used in the view, which is the ancestor of the one you're using android with: animateLayoutChanges on (aka: your BottomSheet container ):

 LayoutTransition transition = new LayoutTransition(); transition.setAnimateParentHierarchy(false); yourLinearLayoutThatNeedsLayoutAnimation.setLayoutTransition(transition); 
+23
source

Maybe this can help you! I can not comment, so I send it as an answer

Here

for the slide layout is the same as the bottom sheet, but good

0
source

BottomSheetBehavior have their own behavior, thanks to which you can get the appropriate result. The following is the behavior of the bottom of the sheet.

STATE_DRAGGING , STATE_SETTLING , STATE_EXPANDED , STATE_COLLAPSED , STATE_HIDDEN .

Do not use the visibility of any layouts.

Use this behavior in your code, for example:

 fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int behaviorState = bottomSheetBehavior.getState(); if (behaviorState == BottomSheetBehavior.STATE_EXPANDED) { bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); } else { bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); } } }); 
0
source

Try making the bottomSheet parent bottomSheet independent CoordinatorLayout without any other Views . For instance:

 <RelativeLayout android:id="@+id/bottom_sheet_coo" android:layout_width="match_parent" android:layout_height="match_parent"> <Some_View .../> <Some_Other_view> . . .</Some_Other_view> <androidx.coordinatorlayout.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true"> <include android:id="@+id/included_layout" layout="@layout/bottom_sheet" /> </androidx.coordinatorlayout.widget.CoordinatorLayout> </RelativeLayout> 
0
source

All Articles