29

我目前FrameLayout在Android 设计支持库中遇到问题,而我在创建选项卡时CoordinatorLayout遵循了这篇文章中的说明。

基本上大多数事情都按预期工作,容器片段被膨胀到FrameLayout并且它们的标签片段被正确地添加到ViewPager标签中(需要这种方式,因为我有许多应该重用布局的片段)。

我正在努力解决的问题是FrameLayout(以及结果标签片段)消耗了整个屏幕高度,因此它ToolbarTabLayout. 为了可视化问题,我创建了以下图像:

可视化问题

CoordinatorLayout带有、Toolbar和的基本布局TabLayout

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

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <include layout="@layout/toolbar" />

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

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

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

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

片段使用的单独布局膨胀为container

<android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

所有片段都被我的班级夸大了BaseFragment(在另一篇关于 SO 调用的帖子上inflater.inflate(getLayoutRes(), null);是导致同样问题的问题)

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    return inflater.inflate(getLayoutRes(), container, false);
}

如果我将 替换CoordinatorLayout为正常LinearLayout,则按预期FrameLayout开始,AppBarLayout但根据文档,它的AppBarLayout大多数功能都需要是CoordinatorLayout.

我可以添加一个marginTopFrameLayout但我想知道是否有任何合适的解决方案。提前感谢您的任何提示!

4

1 回答 1

46

将您app:layout_behavior="@string/appbar_scrolling_view_behavior"移至FrameLayout- 该属性需要位于CoordinatorLayout.

于 2015-09-06T19:29:30.193 回答