【问题标题】:Open Navigation Drawer onCreate在创建时打开导航抽屉
【发布时间】:2014-12-22 14:24:26
【问题描述】:

我目前正在尝试在我的应用程序中实现导航抽屉。为此,我希望在活动开始时打开抽屉。这是我的 onCreate:

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_master);
    isInLandscapeMode = getResources().getBoolean(R.bool.isInLandscape);

    if (!isInLandscapeMode)
    {
        drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

        drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer, R.string.date, R.string.applicationName)
        {
            /**
             * Called when a drawer has settled in a completely closed
             * state.
             */
            public void onDrawerClosed(View view)
            {
                super.onDrawerClosed(view);
            }

            /** Called when a drawer has settled in a completely open state. */
            public void onDrawerOpened(View drawerView)
            {
                super.onDrawerOpened(drawerView);
                drawerView.bringToFront();
                drawerView.requestLayout();
            }
        };

        // Set the drawer toggle as the DrawerListener
        drawerLayout.setDrawerListener(drawerToggle);
        drawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);

        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setHomeButtonEnabled(true);
    }

    drawerLayout.openDrawer(Gravity.START);
}

抽屉正在打开,但如果我尝试单击我的列表条目之一,它会关闭。如果我之后手动打开它,一切正常。我是否必须以某种方式将焦点设置在我的抽屉布局上?我尝试了几件事,但似乎没有任何效果。

更新

终于找到了我的错误:

我的布局 xml 文件中有以下代码:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <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:id="@+id/list_container"
            android:layout_width="320dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="#f1f1f1"
            android:orientation="horizontal" >
        </LinearLayout>

        <FrameLayout
            android:id="@+id/detail_container"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal" >
        </FrameLayout>
    </android.support.v4.widget.DrawerLayout>

</FrameLayout>

主要内容视图(detail_container)必须是导航抽屉思想中的第一个孩子。所以我把它改成了这样:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <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" >

        <FrameLayout
            android:id="@+id/detail_container"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:orientation="horizontal" >
        </FrameLayout>

        <LinearLayout
            android:id="@+id/list_container"
            android:layout_width="320dp"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            android:background="#f1f1f1"
            android:orientation="horizontal" >
        </LinearLayout>
    </android.support.v4.widget.DrawerLayout>

</FrameLayout>

它奏效了。

【问题讨论】:

  • 在onCreate中编写如下代码:mDrawerLayout.openDrawer(mDrawerList);其中 mDrawerList 是列表视图
  • @krunalpatel 我的导航抽屉包含一个片段而不是一个列表,因此它不起作用。有没有其他办法?
  • 使用drawer.openDrawer(Gravity.LEFT);

标签: android navigation-drawer oncreate


【解决方案1】:

使用drawer.openDrawer(Gravity.LEFT);

【讨论】:

  • 正如您在我的代码中看到的那样,我已经有了drawerLayout.openDrawer(Gravity.START);调用它,它应该打开,但如果我尝试点击我的任何条目,导航抽屉就会自行关闭。
【解决方案2】:

找到你的抽屉布局和数据(列表或可扩展列表)后,然后放

  drawerLayout.openDrawer("Name of Data Contained By Drawer");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多