将片段添加到使用DrawerLayout的活动

时间:2014-01-06 19:49:20

标签: android android-layout android-fragments

我正在构建一个Android应用程序,该应用程序利用导航抽屉UI模式进行顶级导航。为了实现这一点,我创建了一个自定义Activity(称为DrawerActivity),可自动初始化DrawerLayout。对于每个DrawerActivity's"内容"查看,我想使用Fragments

默认情况下,每个DrawerActivity都会使以下布局膨胀:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/drawer_drawerLayout"
    tools:context=".activities.DrawerActivity">

    <FrameLayout
        android:id="@+id/content"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <ListView
        android:id="@+id/drawer"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:background="@color/drawer_background" />

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

我也会使用我的应用程序支持各种大小的平板电脑,因此我需要能够将Fragments动态加载到主内容&#34;内容中。视图的布局。没问题,我已经知道如何初始化FragmentTransaction以便为我处理。

然而,当我有一个&#34;内容&#34;时,DrawerLayout似乎只能正常工作。小部件,通常由FrameLayout放置。如果我想用FrameLayout替换Fragment,我只需构建FragmentTransaction并从那里开始。但是,我希望在必要时自动充气两个或更多Fragments(取决于用户是否使用平板电脑)。

我的问题:最好的&#34;最好的&#34;使用Fragments构建我的UI的方法,同时支持导航抽屉UI模式?我应该为<include />&#34;内容&#34;使用DrawerActivity's标记。视图(根据方向和屏幕大小自动选择所需的正确布局),还是应该自己加载Fragments

1 个答案:

答案 0 :(得分:1)

这可以通过构建具有相同名称的单独布局并将其放在'res / layout-sw600dp'目录中来完成:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/drawer_drawerLayout"
    tools:context=".activities.DrawerActivity">

    <LinearLayout
        android:id="@+id/content_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientaion="horizontal" >

            <FrameLayout
                android:id="@+id/content_start"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:weight="1" />

            <FrameLayout
                android:id="@+id/content_end"
                android:layout_width="0dp"
                android:layout_height="fill_parent"
                android:weight="1" />

    </LinearLayout>

    <ListView
        android:id="@+id/drawer"
        android:layout_width="@dimen/navigation_drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:choiceMode="singleChoice"
        android:background="@color/drawer_background" />

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

然后,您可以以编程方式检查content_container id并根据它是否存在加载相应的片段。