旋转后不连贯的 DrawerLayout 行为
Incoherent DrawerLayout behavior after rotation
我有一个 activity 和一个 DrawerLayout
和一个 ActionBarDrawerToggle
来处理侧边菜单。
现在,我需要此 activity 仅在平板电脑上旋转而不是在 phone 上旋转,因此我将 android:configChanges="orientation|..."
添加到我的 activity 清单中并重新实现onConfigurationChanged
。在 phones 上,什么都不做,强制纵向,而在平板电脑上,新方向设置为 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;
}
但是检查抽屉是否可见的测试总是 returns 正确。
知道是什么原因造成的吗?在 onConfigurationChanged 轮换后,我是否忘记重新创建或更新某些内容?
注意:我还发现如果我不重新创建布局(使用setContentView()
)抽屉工作正常(但我显然失去了风景布局并以某种方式缩放纵向布局)
因此,我以某种方式找到了解决方案,方法是在每次设备旋转时重新连接 DrawerLayout
和 ActionBarDrawerToggle
,然后重新创建布局:
setContentView(R.id.my_layout_id);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.setDrawerListener(mDrawerToggle);
在 onConfigurationChanged
方法中。
唯一的缺点是抽屉不会在两个方向之间保持其状态(如果它被打开,它将被重新创建,因此最终会在新方向关闭)。
我有一个 activity 和一个 DrawerLayout
和一个 ActionBarDrawerToggle
来处理侧边菜单。
现在,我需要此 activity 仅在平板电脑上旋转而不是在 phone 上旋转,因此我将 android:configChanges="orientation|..."
添加到我的 activity 清单中并重新实现onConfigurationChanged
。在 phones 上,什么都不做,强制纵向,而在平板电脑上,新方向设置为 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;
}
但是检查抽屉是否可见的测试总是 returns 正确。
知道是什么原因造成的吗?在 onConfigurationChanged 轮换后,我是否忘记重新创建或更新某些内容?
注意:我还发现如果我不重新创建布局(使用setContentView()
)抽屉工作正常(但我显然失去了风景布局并以某种方式缩放纵向布局)
因此,我以某种方式找到了解决方案,方法是在每次设备旋转时重新连接 DrawerLayout
和 ActionBarDrawerToggle
,然后重新创建布局:
setContentView(R.id.my_layout_id);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.setDrawerListener(mDrawerToggle);
在 onConfigurationChanged
方法中。
唯一的缺点是抽屉不会在两个方向之间保持其状态(如果它被打开,它将被重新创建,因此最终会在新方向关闭)。