44

У моего приложения есть viewpager и 4 вкладки, каждая вкладка имеет много фрагментов. Но я просто хочу, чтобы моя панель инструментов прокручивалась вверх/вниз, прокручивая recyclerview в 2 конкретных вкладках. Но я не знаю, как заблокировать прокрутку панели инструментов для других вкладок. Я попытался импортировать панель инструментов для каждого фрагмента, но, похоже, я не могу этого сделать. У кого-нибудь есть идея решить эту проблему?Как настроить приложение: layout_scrollFlags для панели инструментов программно

ответ

83

Я настоятельно рекомендую не изменять флажки прокрутки на основе выбранной вкладки - если панель автоматически возвращается (и содержимое перемещается вниз), когда прокрутка на вкладку не-рециркуляции может быть очень резкой и, вероятно, не взаимодействием шаблона, который вы хотите (раздражен, если ваши две закладки RecyclerView находятся рядом друг с другом).

Однако, если вы хотите увидеть его в лицо, вы можете использовать setScrollFlags() установить флаги прокрутки программно:

Toolbar toolbar = ... // your toolbar within an AppBarLayout 
AppBarLayout.LayoutParams params = 
    (AppBarLayout.LayoutParams) toolbar.getLayoutParams(); 
params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL 
    | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS); 

Для того, чтобы очистить флаги

params.setScrollFlags(0) 
+15

Спасибо. Я не хочу так поступать, но мой глупый клиент этого хочет: D. –

+0

спасибо, путь прав! – Mao

+0

Можно ли прокручивать работу (что означает hide & show из элементов, например app-bar) для ListView и других видов, которые имеют прокрутку? –

8
// Show toolbar when we are in maps mode 
AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) mToolbar.getLayoutParams(); 
CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) mAppBarLayout.getLayoutParams(); 
if(isMapIndex) { 
    params.setScrollFlags(0); 
    appBarLayoutParams.setBehavior(null); 
    mAppBarLayout.setLayoutParams(appBarLayoutParams); 
} else { 
    params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS); 
    appBarLayoutParams.setBehavior(new AppBarLayout.Behavior()); 
    mAppBarLayout.setLayoutParams(appBarLayoutParams); 
} 
Смежные вопросы