【问题标题】:NavigationDrawer with tabs带标签的 NavigationDrawer
【发布时间】:2016-01-17 14:36:29
【问题描述】:

我想结合标签实现NavigationDrawer,就像在 PlayStore 应用中一样:

所以基本的想法是有一个android.support.v4.widget.DrawerLayout 作为AppCompatActivity 的根元素,它包含一个android.support.design.widget.NavigationView 和主要内容(由FrgmentTransaction 切换):

<android.support.v4.widget.DrawerLayout >

    <FrameLayout 
        android:id="@+id/main_content"/>

    <android.support.design.widget.NavigationView
        android:id="@+id/main_navigation"
        app:menu="@menu/main_navigation" />

</android.support.v4.widget.DrawerLayout>

标签是这样实现的:

<android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.AppBarLayout>

        <android.support.v7.widget.Toolbar />

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

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

    <android.support.v4.view.ViewPager
        android:id="@+id/main_tabbed_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

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

但我不知道如何将它们融合在一起:

  • 我在&lt;FrameLayout android:id="@+id/main_content"/&gt; 中使用片段的方法是正确的,还是应该在每次 NavigationView 点击时启动一个新 Activity?
  • 我有选项卡式和非选项卡式片段,如何将所有自定义工具栏绑定到根 DrawerLayout 以显示“三明治图标”? (使用ActionBarDrawerToggle?)
  • 我会遇到性能问题吗?

如果我需要澄清一些事情,请发表评论。

【问题讨论】:

    标签: android android-layout android-fragments navigation-drawer android-tabs


    【解决方案1】:

    您应该将导航视图中的每个页面实现为单独的Fragment。这样,您不必在其中任何一个中包含Toolbar,因为根Activty's Toolbar 将始终显示。

    就性能而言,我使用了类似的模式并且没问题,我认为只要你负责任地做其他事情,Android 平台就会处理它。

    这是一个如何组织的示例:

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context="com.myapplication.ui.activity.MainActivity">
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <android.support.design.widget.CoordinatorLayout
                android:id="@+id/coordinator_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">
    
                <android.support.design.widget.AppBarLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">
    
                    <include layout="@layout/widget_toolbar" />
    
                </android.support.design.widget.AppBarLayout>
    
            </android.support.design.widget.CoordinatorLayout>
    
            <FrameLayout
                android:id="@+id/fragment_container"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_below="@id/coordinator_layout" />
        </RelativeLayout>
    
        <android.support.design.widget.NavigationView
            android:id="@+id/nav_view"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:fitsSystemWindows="true"
            app:headerLayout="@layout/nav_header_main"
            app:menu="@menu/activity_main_drawer" />
    
    </android.support.v4.widget.DrawerLayout>
    

    RelativeLayoutToolbar 下方拥有fragment_container,因此无论将哪个Fragment 放入fragment_container,都会显示相同的Toolbar,因为它属于Activity

    【讨论】:

    • 但是如果没有在片段中声明,如何在工具栏下方添加选项卡?
    • 由于工具栏是活动的一部分,而不是片段容器,它不会受到片段事务的影响。我用一个示例实现更新了我的答案。
    • 这不是我要找的,因为TabLayout 不会剪辑到Toolbar,因为它们不是同一个AppBarLayout 的一部分。
    • 您是否尝试将FrameLayout 内的AppBarLayout 移动到Toolbar 下方?这可能就是你要找的东西
    猜你喜欢
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多