在导航抽屉中显示三行
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_drawer
是 drawable
资源文件夹中的一个图标,显示三行图标。下载 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();
}
我最近更新了我的应用程序以在 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_drawer
是 drawable
资源文件夹中的一个图标,显示三行图标。下载 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();
}