【发布时间】:2015-01-23 15:55:03
【问题描述】:
我有一个带有DrawerLayout 和ActionBarDrawerToggle 的活动来处理侧边菜单。
现在,我需要这个活动只在平板电脑上而不是在手机上轮换,所以我在我的清单中为那个活动添加了android:configChanges="orientation|...",并重新实现了onConfigurationChanged。在手机上,什么都不做,并且强制纵向,而在平板电脑上,新方向设置为 SCREEN_ORIENTATION_SENSOR 让设备决定并且我用 setContentView() 重新加载布局。
因为我已经这样做了,我的侧边菜单不会在第一次旋转之后打开。我发现onOptionsItemSelected 仍然被称为:
public boolean onOptionsItemSelected(MenuItem item)
{
if (item.getItemId() == android.R.id.home) {
if (mDrawerLayout.isDrawerVisible(GravityCompat.START)) {
mDrawerLayout.closeDrawer(GravityCompat.START);
}
else {
mDrawerLayout.openDrawer(GravityCompat.START);
}
}
return true;
}
但是检查抽屉是否可见的测试总是返回 true。
知道什么可能导致这种情况吗?我是否忘记在 onConfigurationChanged 轮换后重新创建或更新某些内容?
注意:我还发现如果我不重新创建布局(使用setContentView()),抽屉可以正常工作(但我显然会丢失横向布局并以某种方式获得纵向布局缩放)
【问题讨论】:
标签: android android-layout drawerlayout screen-rotation