У меня есть одно Android-приложение Activity с множеством фрагментов. Когда я показываю экран списка, я хочу использовать Toolbar
со свойством app:layout_scrollFlags="scroll|enterAlways"
. И в фрагментах деталей я хочу использовать CollapsingToolbarLayout
с изображением в нем. Поскольку это одно приложение Activity, у меня есть только один файл Toolbar
. Можно ли изменить мой макет программно, чтобы он подходил для обоих случаев?
Программное изменение флагов прокрутки Toolbar и CollapsingToolbarLayout
Ответы (3)
Да. Допустим, вы переходите от фрагмента CollapsingToolbarLayout к фрагменту Toolbar.
Вы сворачиваете свой
AppBarLayout
, используяAppBarLayout.setExpanded(false)
;Вы меняете флаги прокрутки в соответствии с вашими потребностями.
AppBarLayout.LayoutParams p = (AppBarLayout.LayoutParams) toolbar.getLayoutParams(); p.setScrollFlags(...); toolbar.setLayoutParams(p);
То же самое касается CollapsingToolbarLayout, если это необходимо. Я думаю, это должно быть что-то вроде:
collapsingToolbarParams.setScrollFlags(0); //no flags for ctl toolbarParams.setScrollFlags(SCROLL_FLAG_SCROLL | SCROLL_FLAG_ENTER_ALWAYS); //new flags for toolbar
person
natario
schedule
05.09.2015
У меня также была эта проблема. Кажется, я забыл вызвать метод
setLayoutParams()
. Спасибо за ответ!
- person Mauker; 05.01.2016
setScrollFlags(0) работает нормально, но когда я пытаюсь установить это: params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS | AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP); // очистить все флаги прокрутки toolbar.setLayoutParams(params); не работает..
- person iBobb; 13.03.2016
я нашел это работающим
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);
}
person
Vivek Pratap Singh
schedule
18.11.2019
Работает на меня.
public void enableToolBarScrolling(CollapsingToolbarLayout toolbar) {
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams();
params.setScrollFlags(SCROLL_FLAG_SCROLL | SCROLL_FLAG_ENTER_ALWAYS);
toolbar.setLayoutParams(params);
}
person
Julio Cesar
schedule
17.03.2021