如果您想在抽屉进入屏幕后立即覆盖操作栏并在抽屉不再可见时恢复操作栏(与 2014 年 3 月 20 日的 Gmail 行为完全相同),您可以使用以下代码:
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
@Override
public void onDrawerStateChanged(int newState) {
super.onDrawerStateChanged(newState);
boolean isOpened = mDrawerLayout.isDrawerOpen(mDrawerList);
boolean isVisible = mDrawerLayout.isDrawerVisible(mDrawerList);
if (!isOpened && !isVisible) {
if (newState == DrawerLayout.STATE_IDLE) {
// drawer just hid completely
restoreActionBar();
} else {
// } else if (newState == DrawerLayout.STATE_SETTLING) {
// drawer just entered screen
overrideActionBar();
}
}
}
private void restoreActionBar() {
getSupportActionBar().setTitle(mTitle);
supportInvalidateOptionsMenu();
}
private void overrideActionBar() {
getSupportActionBar().setTitle(mDrawerTitle);
supportInvalidateOptionsMenu();
}
};
// Set the drawer toggle as the DrawerListener
mDrawerLayout.setDrawerListener(mDrawerToggle);
根据您的需要修改restoreActionBar()
和overrideActionBar()
方法。
无需区分滑动和主页按钮,也无需测量滑动长度。
变化
如果您不想引用抽屉列表视图,请改用以下代码:
boolean isOpened = mDrawerLayout.isDrawerOpen(GravityCompat.START);
boolean isVisible = mDrawerLayout.isDrawerVisible(GravityCompat.START);
GravityCompat.END
根据您在 XML 布局中指定的内容,您可能希望使用它。
编辑 - 有关操作
上面的示例没有隐藏与导航抽屉下方的内容相关的操作栏项目。为此或在抽屉可见时显示不同的图标集,您必须跟踪抽屉是手动打开还是关闭。
除了上述代码之外,还声明private boolean mDrawerVisible = false
了正确的保存/恢复状态处理。然后修改mDrawerToggle
内部方法如下:
private void restoreActionBar() {
getSupportActionBar().setTitle(mTitle);
mDrawerVisible = false;
supportInvalidateOptionsMenu();
}
private void overrideActionBar() {
getSupportActionBar().setTitle(mDrawerTitle);
mDrawerVisible = true;
supportInvalidateOptionsMenu();
}
最后在onCreateOptionsMenu
膨胀不同的菜单资源或onPrepareOptionsMenu
显示/隐藏基于mDrawerVisible
.