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>
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);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With