Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AppBarLayout strange behavior when changing visibility of some views in it

I have AppBarLayout with some views in it. Last view doesn't have scrollflags, so that view is sticky when scrolling. All working good. But when I change visibilities of some views, last view which must be sticky scrolls out of screen.By debaging I've noticed that appBarLayout.getTotalScrollRange() is changing when I change some child views of appBar visibility to Visible, but when I hide them, that value didn't change and it somehow affecting on scroll. Any advises what I can do?

    <android.support.design.widget.AppBarLayout
        android:id="@+id/main_appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/white"
        android:fitsSystemWindows="false"
        app:elevation="0dp">
        <include
            layout="@layout/placement_contracts_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|enterAlways" />

        <include
            android:id="@+id/placement_header_container"
            layout="@layout/placement_header_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|enterAlways" />

        <include
            android:id="@+id/contract_layers_container"
            layout="@layout/placement_contract_layers_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/placement_header_container"
            android:layout_marginTop="-5dp"
            app:layout_scrollFlags="scroll|enterAlways" />

        <include
            android:id="@+id/placement_strategic_doc_header"
            layout="@layout/placement_strategic_doc_header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/placement_header_container"
            android:layout_marginTop="-7dp"
            app:layout_scrollFlags="scroll|enterAlways" />

        <include
            android:id="@+id/placement_strategic_doc_folder_header"
            layout="@layout/placement_strategic_doc_folder_header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/placement_header_container"
            android:layout_marginTop="-7dp"
            app:layout_scrollFlags="scroll|enterAlways" />

        <include
            android:id="@+id/placement_contract_header"
            layout="@layout/placement_contract_header"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/placement_header_container"
            android:layout_marginTop="-7dp"
            app:layout_scrollFlags="scroll|enterAlways" />

        <include
            android:id="@+id/layer_terms_container"
            layout="@layout/placement_layer_terms_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@+id/placement_header_container"
            android:layout_marginTop="-6dp" />
    </android.support.design.widget.AppBarLayout>
like image 810
Roman Datsko Avatar asked Dec 03 '25 04:12

Roman Datsko


1 Answers

I also had this issue, I solved it by adding a workaround for removing the scroll flags on the views which are hidden:

private void _setScrollFlagsEnabled(boolean enable) {
    if (_spotlightPager == null || _spotlightHeader == null) {
        return;
    }
    AppBarLayout.LayoutParams headerParams = (AppBarLayout.LayoutParams)_spotlightHeader.getLayoutParams();
    AppBarLayout.LayoutParams spotlightParams = (AppBarLayout.LayoutParams)_spotlightPager.getLayoutParams();
    if (enable) {
        headerParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
        spotlightParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
    } else {
        headerParams.setScrollFlags(0);
        spotlightParams.setScrollFlags(0);
    }
}
like image 138
Daniel Zolnai Avatar answered Dec 05 '25 20:12

Daniel Zolnai



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!