android - 底部带有可隐藏 fragment 的 CoordinatorLayout

标签 android android-layout android-fragments

我有一个带有 AppBarLayout 和可折叠 TabLayout 的 CoordinatorLayout。我的内容有一个 ViewPager。这是到目前为止的工作层次结构:

<CoordinatorLayout>
    <AppBarLayout>
        <Toolbar />
        <TabLayout />
    </AppBarLayout>
    <ViewPager />
</CoordinatorLayout>

现在我想在底部有一个可以隐藏的 fragment 。当隐藏底部 fragment 时,ViewPager 应该占用所有可用空间。当底部 fragment 可见时,不应混淆 ViewPager 的任何部分。

这是第一次尝试:

<CoordinatorLayout>
    <AppBarLayout>
        <Toolbar />
        <TabLayout />
    </AppBarLayout>

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

    <FrameLayout
        android:id="@id/fragmentContainer"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:layout_gravity="bottom"
        android:background="@android:color/background_light"
        android:elevation="@dimen/action_bar_elevation"/>

</CoordinatorLayout>

使用此布局,当框架布局可见时,我的 ViewPager 的底部会被混淆。为 ViewPager 提供具有 FrameLayouts 高度的底部边距,即使 FrameLayout 消失了,我的底部也总是有一个空白区域。

我尝试将 ViewPager 和 FrameLayout 包装在 LinearLayout 中,但是当 fragment 的 FrameLayout 可见时,ViewPager 的顶部位于 AppBar 后面。

有人可以帮忙吗?

最佳答案

我不是 100% 确定我是否理解你的问题,但你为什么不试试这个:

<CoordinatorLayout>
    <AppBarLayout>
        <Toolbar />
        <TabLayout />
    </AppBarLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">

        <android.support.v4.view.ViewPager
            android:id="@+id/viewpager"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

        <FrameLayout
            android:id="@id/fragmentContainer"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:layout_gravity="bottom"
            android:background="@android:color/background_light"
            android:elevation="@dimen/action_bar_elevation"/>
    </LinearLayout>
</CoordinatorLayout>

ViewPager 的 layout_widthlayout_weight 非常重要,因此请复制这些确切的值。

关于android - 底部带有可隐藏 fragment 的 CoordinatorLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34150484/

相关文章:

android - 如何关闭 Activity ,以便无法从 Activity 应用程序再次打开?

android - 如何在android中使用水平 "material progressindicator"?

android - 如何在项目Android Studio之间同步对gradle文件所做的所有更改

android - v19/v21 中的重复样式

java - 从 fragment 的父 Activity 中调用 AsyncTask

android - 即使在应用程序关闭时也要运行的后台任务

android - 如何在启动画面后制作相同的布局

android - GridView水平间距错误

android - 为什么在调用 setRetainInstance(true) 时,TextView 的文本没有恢复?

android - CoordinatorLayout + ActionBar + fragment