1

Я реализовал CoordinatorLayout и обернул мой Toolbar внутри AppBarLayout, так что панель инструментов скрывается при прокрутке. Большая часть приложения состоит из фрагментов, которые меняются в и из @id/container FrameLayout, как показано ниже. Некоторые фрагменты всего лишь RecyclerViews, а другие - другие макеты. Я добавил app:layout_behavior="@string/appbar_scrolling_view_behavior" в @id/container FrameLayout. Heres мой основной макет:AppBarLayout скрытие панели инструментов на поведение прокрутки, переключение фрагментов

<DrawerLayout> 

    <RelativeLayout 
     android:id="@+id/mainRelativeLayout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     > 

     <android.support.design.widget.CoordinatorLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      > 

      <android.support.design.widget.AppBarLayout 
       android:id="@+id/appBarLayout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       > 

       <Toolbar 
        android:id="@+id/toolbar" 
        android:layout_width="match_parent" 
        android:layout_height="?attr/actionBarSize" 
        android:elevation="5dp" 
        app:layout_scrollFlags="scroll|enterAlways" 
        > 

       </Toolbar> 

      </android.support.design.widget.AppBarLayout> 

      <FrameLayout 
       android:id="@+id/container" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       app:layout_behavior="@string/appbar_scrolling_view_behavior" 
       /> 

     </android.support.design.widget.CoordinatorLayout> 

    </RelativeLayout> 

<!-- ignore --> 
<drawercontents> 
</DrawerLayout> 

Теперь Toolbar скрывается при прокрутке на фрагментах с RecyclerView.

Проблема в том, что при переключении на другой фрагмент, который не имеет RecyclerView, он испортит макет фрагментов. Например, если я прокручиваю вниз фрагмент, который содержит RecyclerView, то Toolbar скроет себя (как и должен). Затем, если я переключусь на другой фрагмент без RecyclerView, панель инструментов по-прежнему будет скрыта, а макет будет расширяться в дополнительное пространство. Если я вернусь к фрагменту с RecyclerView и не прокручиваю (так что Toolbar остается видимым), а затем переключитесь на другой фрагмент, содержимое теперь отбрасывается с экрана из-за Toolbar.

Heres скриншот выпуска: http://prnt.sc/a7majo

Я также попытался отключить поведение прокрутки в этом фрагменте, используя следующий код:

Toolbar mToolbar = (Toolbar) getActivity().findViewById(R.id.toolbar); 

AppBarLayout.LayoutParams toolbarLayoutParams = (AppBarLayout.LayoutParams) mToolbar.getLayoutParams(); 
toolbarLayoutParams.setScrollFlags(0); 
mToolbar.setLayoutParams(toolbarLayoutParams); 

AppBarLayout appBarLayout = (AppBarLayout) getActivity().findViewById(R.id.appBarLayout); 

CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) appBarLayout.getLayoutParams(); 
appBarLayoutParams.setBehavior(null); 
appBarLayout.setLayoutParams(appBarLayoutParams); 

Это не работает либо производит странный результат, изображенный на внизу здесь: http://prnt.sc/a7mapg

Итак, каково обходное решение для этого? Я видел несколько других вопросов, которые были похожи на это, но ответы, по-видимому, не работали для моей ситуации. Заранее спасибо!

+0

Любые обновления по этому вопросу? Вы решили это? –

+1

Ну, я в конечном итоге полностью изменил структуру приложения, но для этой конкретной проблемы я смог получить решение, заставив 'AppBarLayout' расширять некоторые фрагменты. – Orbit

+0

Да, я просто решил, что это так: ключ заключается в изменении параметров appbarlayout на основе фрагмента каждый раз, когда вы совершаете другой фрагмент, я отправлю фрагмент кода в качестве ответа. –

ответ

2
protected void setScrollingEnabled(boolean isEnabled) { 
    AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) toolbar.getLayoutParams(); 
    params.setScrollFlags(isEnabled ? (AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS) : 0); 
} 
Смежные вопросы