I have a single Activity android app with lots of fragments. When I'm showing a list screen I want to use the Toolbar
with the, app:layout_scrollFlags="scroll|enterAlways"
property. And in the detail fragments I want to use the CollapsingToolbarLayout
with an image in it. Since it's a single Activity app, I have only one Toolbar
. Is it possible to modify my layout programmatically to suit both cases?
Changing Toolbar and CollapsingToolbarLayout scroll flags programmatically
Yes. Let's say you are going from the CollapsingToolbarLayout fragment to the Toolbar one.
You collapse your
AppBarLayout
usingAppBarLayout.setExpanded(false)
;You change the scroll flags to fit your needs.
AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) toolbar.getLayoutParams(); p.setScrollFlags(...); toolbar.setLayoutParams(p);
Same goes for the CollapsingToolbarLayout if necessary. I guess it should be something like:
collapsingToolbarParams.setScrollFlags(0); //no flags for ctl toolbarParams.setScrollFlags(SCROLL_FLAG_SCROLL | SCROLL_FLAG_ENTER_ALWAYS); //new flags for toolbar
setScrollFlags(0) works fine but when I try to set it to this: params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS | AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP); // clear all scroll flags toolbar.setLayoutParams(params); doesn't work.. –
Wizard
I found it working
public void disableToolBarScrolling() {
CollapsingToolbarLayout toolbar = findViewById(R.id.collap_toolbar);
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
params.setScrollFlags(0);
}
public void enableToolBarScrolling() {
CollapsingToolbarLayout toolbar = findViewById(R.id.collap_toolbar);
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
params.setScrollFlags(SCROLL_FLAG_SCROLL | SCROLL_FLAG_ENTER_ALWAYS);
}
Works for me.
public void enableToolBarScrolling(CollapsingToolbarLayout toolbar) {
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
params.setScrollFlags(SCROLL_FLAG_SCROLL | SCROLL_FLAG_ENTER_ALWAYS);
toolbar.setLayoutParams(params);
}
© 2022 - 2024 — McMap. All rights reserved.
setLayoutParams()
method. Thanks for the answer! – Marxist