Промяна на флаговете за превъртане на лентата с инструменти и CollapsingToolbarLayout програмно

Имам едно приложение Activity за Android с много фрагменти. Когато показвам екран със списък, искам да използвам Toolbar със свойството app:layout_scrollFlags="scroll|enterAlways". И в детайлните фрагменти искам да използвам CollapsingToolbarLayout с изображение в него. Тъй като това е едно приложение за активност, имам само едно Toolbar. Възможно ли е да променя оформлението си програмно, за да отговаря на двата случая?




Отговори (3)


да Да приемем, че преминавате от фрагмента CollapsingToolbarLayout към този на лентата с инструменти.

  1. Вие свивате своя AppBarLayout с помощта на AppBarLayout.setExpanded(false);

  2. Променяте флаговете за превъртане, за да отговарят на вашите нужди.

    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
comment
И аз имах този проблем. Изглежда, че съм забравил да извикам метода setLayoutParams(). Благодаря за отговора! - person Mauker; 05.01.2016
comment
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