Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用片段在活动中实现导航抽屉_Java_Android_Android Layout_Android Fragments_Navigation Drawer - Fatal编程技术网

Java 使用片段在活动中实现导航抽屉

Java 使用片段在活动中实现导航抽屉,java,android,android-layout,android-fragments,navigation-drawer,Java,Android,Android Layout,Android Fragments,Navigation Drawer,我目前正在重新设计我的应用程序,以包括一个导航抽屉,用于在应用程序中导航。目前,每个屏幕都是一个活动,我设计主屏幕的方式是,它包含一个工具栏和另一个xml文件 <?xml version="1.0" encoding="utf-8"?> 现在,我为导航抽屉制作了另一个XML文件: <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/and

我目前正在重新设计我的应用程序,以包括一个导航抽屉,用于在应用程序中导航。目前,每个屏幕都是一个活动,我设计主屏幕的方式是,它包含一个工具栏和另一个xml文件

<?xml version="1.0" encoding="utf-8"?>


现在,我为导航抽屉制作了另一个XML文件:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!-- The main content view where fragments are loaded -->
    <FrameLayout
        android:id="@+id/flContent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />
</LinearLayout>

<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:menu="@menu/activity_main_drawer" />

我的缺点是,由于我的工具栏位于home.xml片段中,当我切换片段时,我将丢失工具栏。我想保留导航抽屉中所有视图的工具栏


另外,在我的java代码中,setActionBar(工具栏)抛出了一个错误,表示无法解析方法setActionBar

在您的活动中尝试此功能

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        toolbar.setTitle("");
        setSupportActionBar(toolbar);
这是我的.xml文件

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:paddingBottom="@dimen/design_navigation_separator_vertical_padding"
    tools:openDrawer="start">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:orientation="vertical">

        <include
            android:id="@+id/toolbar"
            layout="@layout/apptoolbar" />

        <FrameLayout
            android:id="@+id/frame_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/nav_toolbar"
            android:clickable="true">

        </FrameLayout>
    </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:background="@color/appColor"
        android:fitsSystemWindows="true"
        android:paddingBottom="@dimen/design_navigation_separator_vertical_padding"
        app:itemTextAppearance="@style/NavigationDrawerStyle"
        app:headerLayout="@layout/nav_header_home"
        app:itemBackground="@color/appColor"
        app:itemTextColor="@color/drawable_selector_drawer_item"
        app:menu="@menu/activity_home_drawer" />

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

在活动中集成NavigationDrawer和Fragment的一个简单而直接的解决方案是以以下方式设计
活动\u main.xml

 <?xml version="1.0" encoding="utf-8"?>
   <android.support.v4.widget.DrawerLayout    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:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:layoutDirection="rtl"
    tools:openDrawer="start">

    <include
        layout="@layout/content_act_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />


    <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"
        android:background="@color/flat_white_light">

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

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

如果您注意到,在
conten\u act\u main.xml
中,有一个工具栏可用于
FrameLayout
中显示的所有内容,您可以使用此FrameLayout作为片段的容器。

您当然可以维护此工具栏,您需要
ActionBarDrawerToggle
抽屉布局
工具栏
绑定在一起

最低配置或多或少是:

 ActionBarDrawerToggle actionBarDrawerToggle;
    DrawerLayout drawerLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        drawerLayout = (DrawerLayout) findViewById(R.id.navigation_drawer);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.app_name,R.string.app_name);
        drawerLayout.setDrawerListener(actionBarDrawerToggle);
    }
然后将工具栏放在基本活动布局中,其他视图包装在
DrawerLayout


....
....

所以我应该将工具栏放在基本活动中?XML呢?我能把它和抽屉一起放吗?我不能使用supportActionBar,我没有使用此工具栏的支持库。谢谢,这很有帮助。我会试着让你知道。这很有效,但现在我的布局被严重破坏了。有什么建议吗?在图片中显示布局的xml此布局位于名为main.xml的文件中,该文件是home.xml的一部分,home.xml是content.xml的一部分。如果你有电子邮件,我可以发给你。在这里展示太多了,不能。未解析setSupportActionbar。如果我不使用支持库,那么ActionBarDrawerToggle()函数就不会接受正确的参数。大多数情况下,在
android.support.v7.widget.Toolbar
和扩展
AppCompatActivity
ActionBarActivity
下可以识别setSupportActionbar。无法识别。未解析setSupportActionbar。如果我不使用支持库,那么ActionBarDrawerToggle()函数就不会接受正确的参数。我在没有“toolbar”参数的情况下通过了构造函数,现在我的屏幕都倾斜了。Richeek,尝试使用这些组合,看看它是否适用于Android.support.v4.widget.DrawerLayout;,Android.support.v7.app.ActionBarDrawerToggle;,和Android.support.v7.widget.Toolbar;以及扩展ActionBarActivity的基本活动。由于在ActionBarDrawerToggle()中未正确传递,工具栏不知何故与抽屉重叠。请看一看,它可能会对您有所帮助。如果片段本身与抽屉布局的项目相对应,那么请签出
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?actionBarSize"
            android:background="?attr/colorPrimary"
            android:theme="@style/ToolbarColoredBackArrow"
            app:popupTheme="@style/AppTheme.PopupOverlay" >

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

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

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>
 ActionBarDrawerToggle actionBarDrawerToggle;
    DrawerLayout drawerLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        drawerLayout = (DrawerLayout) findViewById(R.id.navigation_drawer);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
        actionBarDrawerToggle = new ActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.app_name,R.string.app_name);
        drawerLayout.setDrawerListener(actionBarDrawerToggle);
    }
  <Android.support.v4.widget.DrawerLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:id="@+id/navigation_drawer"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:fitsSystemWindows="true">

        <Android.support.v7.widget.Toolbar
            xmlns:Android="http://schemas.Android.com/apk/res/Android"
            xmlns:app="http://schemas.Android.com/apk/res-auto"
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            ></Android.support.v7.widget.Toolbar>
        ....
        ....
    </Android.support.v4.widget.DrawerLayout>