19

让导航抽屉与夏洛克操作栏一起使用,但我无法显示 3 行图标(如 gmail)而不是正常的向上按钮“<”。这是我的代码 ic_drawer 是 gmail 使用的 3 行图标

getSupportActionBar().setIcon(R.drawable.myIcon);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowTitleEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawer,
            R.drawable.ic_drawer, R.string.menu_open, R.string.menu_close) {
        public void onDrawerClosed(View view) {

            super.onDrawerClosed(view);
        }

        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
        }
    };
4

11 回答 11

40

您是否尝试过实现该方法:

    mDrawerToggle.syncState();

这在过去对我有用。

于 2013-07-04T10:21:15.113 回答
21

该解决方案对我有用,并在所有版本中显示了默认的导航抽屉图标。SherlockNavigationDrawer从这里https://github.com/nicolasjafelle/SherlockNavigationDrawer将库添加 到您的项目中。并更改您的代码如下:

SherlockActionBarDrawerToggle mDrawerToggle = new SherlockActionBarDrawerToggle(this,mDrawerLayout,
   R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
   public void onDrawerClosed(View view) {
       super.onDrawerClosed(view);
   }
   public void onDrawerOpened(View drawerView) {
       super.onDrawerOpened(drawerView);
   }
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
getSupportActionBar().setIcon(R.drawable.ic_launcher);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(true);
于 2013-09-24T11:26:14.323 回答
3

虽然我现在猜你一定已经解决了,只是想提交一个答案:

将您的代码更改为以下内容:

mDrawerToggle = new ActionBarDrawerToggle(this, mDrawer,
        R.drawable.ic_drawer, R.string.menu_open, R.string.menu_close) {
    public void onDrawerClosed(View view) {

        super.onDrawerClosed(view);
    }

    public void onDrawerOpened(View drawerView) {
        super.onDrawerOpened(drawerView);
    }
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
getSupportActionBar().setIcon(R.drawable.myIcon);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(true);

本质上,您在代码中设置的 ActionBar 选项需要在 DrawerToggle 完成之后设置,而不是之前。

于 2013-08-06T11:38:58.930 回答
2

你可以先看看这个帖子。有一个答案:“您可以在主题中更改回图标

<item name="android:homeAsUpIndicator">@drawable/action_arrow</item>

但我认为你想要实现Navigation Drawer,所以请阅读它。

于 2013-06-10T19:06:29.110 回答
2

您可以做的是创建如下样式:

 <style name="AppTheme" parent="Your Theme name">
        <item name="homeAsUpIndicator">@drawable/ic_drawer</item>
 </style>

在 Android 清单中应用这个主题,如:

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
</application>

这肯定会解决获得 3 行图标的问题。

于 2013-06-17T12:54:24.683 回答
1

你把开关加到抽屉里了吗?

mDrawerLayout.setDrawerListener(mDrawerToggle);
于 2013-06-12T11:13:21.243 回答
0

@zudo1337 的方法解决了我的问题。

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}
于 2014-04-09T09:31:38.547 回答
0

我把它放进去,它就起作用了。

    @Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}
于 2013-11-06T10:02:17.777 回答
0

当您在 Android < 3 中运行您的应用程序时,会发生这种情况,即使是 Google 应用程序也会受到此影响。

但是有一个项目可以解决这个问题: https ://github.com/nicolasjafelle/SherlockNavigationDrawer

于 2013-07-22T07:31:15.110 回答
0

我在调用 setDrawerListener 之前添加了这一行。

mDrawerLayout.post(new Runnable() {
@Override public void run() {
 mDrawerToggle.syncState();
}
});

希望这将解决较低设备中的问题。

于 2014-06-03T12:24:57.987 回答
-2

可能这会奏效...

在 onCreateOptionMenu 膨胀你的菜单布局 getSupportMenuInflater().inflate(R.menu.action_bar_menu, menu);

于 2013-06-28T09:42:34.950 回答