【发布时间】:2016-02-24 23:10:12
【问题描述】:
我已经实现了一个CoordinatorLayout 并将我的Toolbar 包裹在一个AppBarLayout 中,这样工具栏在滚动时就会隐藏起来。大部分应用程序包含在@id/container FrameLayout 中交换进出的片段,如下所示。一些片段只是RecyclerViews,而另一些则是其他布局。我已将app:layout_behavior="@string/appbar_scrolling_view_behavior" 添加到@id/container FrameLayout。这是我的主要布局:
<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 而被推下屏幕。
这是问题的截图: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扩展某些片段来获得解决方案。 -
是的,我刚刚解决的也是,关键是每次提交另一个片段时根据片段更改appbarlayout参数,我将发布代码sn-p作为答案。
标签: android android-layout android-fragments android-coordinatorlayout android-appbarlayout