在导航抽屉中显示三行

Show the three lines at navigation drawer

我最近更新了我的应用程序以在 2 个活动中使用导航抽屉(而不是像过去那样只使用一个)。为此,创建了一个 DrawerActivity 父级 class,并且我将此 class 扩展到我想要使用它的两个活动上。问题是,它没有显示三行符号,而是显示后退箭头符号。以前,当我只在主 activity 中使用导航抽屉时,它会按应有的方式显示(三行),如下所示:

这是我为此使用的代码:

drawerListener = new ActionBarDrawerToggle(this, drawerLayout,
            R.drawable.ic_navigation_drawer, R.string.navigation_drawer_open,
            R.string.navigation_drawer_close) {
        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
        }

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

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
        }
    }
    getActionBar().setHomeButtonEnabled(true);
    getActionBar().setDisplayHomeAsUpEnabled(true);

知道为什么它显示后退按钮而不是三行吗?谢谢。

尝试将您的代码更改为:

    // enabling action bar app icon and behaving it as toggle button.
    // call these codes before calling "setDrawerListener(drawerListener)"
    getActionBar().setDisplayHomeAsUpEnabled(true);
    getActionBar().setHomeButtonEnabled(true);

    // set up the drawerListener
    drawerListener = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, //nav menu toggle icon
            R.string.app_name, // nav drawer open - description for accessibility
            R.string.app_name // nav drawer close - description for accessibility
    ) {
        public void onDrawerClosed(View view) {
            // calling onPrepareOptionsMenu() to show action bar icons
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView) {
            // calling onPrepareOptionsMenu() to hide action bar icons
            invalidateOptionsMenu();
        }
    };
    mDrawerLayout.setDrawerListener(drawerListener);

其中 R.drawable.ic_drawerdrawable 资源文件夹中的一个图标,显示三行图标。下载 ic_drawer here 并将其导入您的项目。

好吧,经过长时间的“战斗”,我终于意识到问题出在哪里了。它似乎与问题中发布的代码无关,activity 缺少带有 syncState() 函数的 onPostCreate() 方法:

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

感谢大家的支持,希望这能帮助其他人避免忘记 syncState() 函数。

在我的例子中,删除行 actionBarDrawerToggle.setDrawerIndicatorEnabled(false); 行得通,并再次用三行替换了后退箭头。

setDrawerIndicatorEnabled 默认为真。我弄错了。

只需添加这个,

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    new ActionBarDrawerToggle(this, (DrawerLayout) findViewById(R.id.drawer_layout),
            (Toolbar) findViewById(R.id.toolbar), R.string.navigation_drawer_open,
            R.string.navigation_drawer_close) {}.syncState();
}