Я реализовал 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
Итак, каково обходное решение для этого? Я видел несколько других вопросов, которые были похожи на это, но ответы, по-видимому, не работали для моей ситуации. Заранее спасибо!
Любые обновления по этому вопросу? Вы решили это? –
Ну, я в конечном итоге полностью изменил структуру приложения, но для этой конкретной проблемы я смог получить решение, заставив 'AppBarLayout' расширять некоторые фрагменты. – Orbit
Да, я просто решил, что это так: ключ заключается в изменении параметров appbarlayout на основе фрагмента каждый раз, когда вы совершаете другой фрагмент, я отправлю фрагмент кода в качестве ответа. –