导航抽屉无法在 Android 中运行我的代码?

Navigation Drawer not working my Code in Android?

我在 Android.I 中使用导航抽屉,有一些代码 examples.In 我的代码可以更改抽屉打开和抽屉关闭标题,但面板不是 open.I 未插入列表视图数组。我的主要问题是没有打开 panel.Is 我在代码中遗漏的任何内容?

layout_mynavigation.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
    android:layout_height="150dp"
    android:layout_width="match_parent"
    android:id="@+id/toolbar"
    android:background="?attr/colorPrimary"
    android:minHeight="?android:attr/actionBarSize"/>
<android.support.v4.widget.DrawerLayout
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <ListView
        android:id="@+id/drawer_list"
        android:layout_width="240dp"
        android:layout_height="wrap_content"
        android:background="#000000"
        android:layout_gravity="start"/>
</android.support.v4.widget.DrawerLayout>

MyNavigation.java

import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;

public class MyDrawer extends AppCompatActivity {
private ActionBarDrawerToggle mActionBarDrawerToggle;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.layout_mydrawer);

    Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
    }

    DrawerLayout mDrawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
    mActionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,R.string.drawer_open,R.string.drawer_closed) {
        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            if (getSupportActionBar() != null) {
                getSupportActionBar().setTitle( R.string.drawer_open );
                invalidateOptionsMenu();
            }
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            if (getSupportActionBar() != null) {
                getSupportActionBar().setTitle( R.string.drawer_closed );
                invalidateOptionsMenu();
            }
        }
    };

    mDrawerLayout.setDrawerListener(mActionBarDrawerToggle);

}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    mActionBarDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mActionBarDrawerToggle.onConfigurationChanged( newConfig );
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    return mActionBarDrawerToggle.onOptionsItemSelected(item) || super.onOptionsItemSelected(item);
}
}

styles.xml

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <!-- Customize your theme here. -->
</style>

DrawerLayout 期望它的第一个子元素是实际布局,第二个子元素是抽屉。因此,要使其正常工作,您应该将布局更改为(假设您的整个抽屉仅包含一个 ListView):

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    <android.support.v7.widget.Toolbar
            android:layout_height="150dp"
            android:layout_width="match_parent"
            android:id="@+id/toolbar"
            android:background="?attr/colorPrimary"
            android:minHeight="?android:attr/actionBarSize"/>
  </LinearLayout>
  <ListView
        android:id="@+id/drawer_list"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:background="#000000"
        android:layout_gravity="start"/>
</android.support.v4.widget.DrawerLayout>

您的 xml 布局似乎需要重新安排。 DrawerLayout 应该包含两个项目; 1) ViewViewGroup 设置为页面内容(例如,RelativeLayout 包含 ToolbarFragment 容器); 2) 一个 ViewViewGroup,其中包含您的 NavigationDrawer 项(例如,ListView)。

<android.support.v4.widget.DrawerLayout
    android:id="@+id/navigation_drawer_layout"
    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">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.Toolbar
            android:id="@+id/your_toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:background="@color/your_toolbar_color"
            android:minHeight="?attr/actionBarSize"/>

        <FrameLayout
            android:id="@+id/fragment_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/your_toolbar"/>
    </RelativeLayout>

    <ListView
        android:id="@+id/your_drawer_list"
        android:layout_width="@dimen/drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="left"
        android:background="@color/your_drawer_color"
        android:divider="@null"/>
</android.support.v4.widget.DrawerLayout>

您可以在此处获得更详细的解释和示例:

https://developer.android.com/training/implementing-navigation/nav-drawer.html

如果您的列表为空并且您的高度为 wrap_content,则高度将为 0。将其更改为 match_parent 将使其填满屏幕,而不管内容如何。

<ListView
    android:id="@+id/drawer_list"
    android:layout_width="240dp"
    android:layout_height="match_parent"
    android:background="#000000"
    android:layout_gravity="start"/>