【问题标题】:Incoherent DrawerLayout behavior after rotation旋转后不连贯的 DrawerLayout 行为
【发布时间】:2015-01-23 15:55:03
【问题描述】:

我有一个带有DrawerLayoutActionBarDrawerToggle 的活动来处理侧边菜单。

现在,我需要这个活动只在平板电脑上而不是在手机上轮换,所以我在我的清单中为那个活动添加了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


    【解决方案1】:

    因此,我以某种方式找到了解决此问题的方法,方法是在重新创建布局后,每次设备旋转时将 DrawerLayout 重新连接到 ActionBarDrawerToggle

        setContentView(R.id.my_layout_id);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerLayout.setDrawerListener(mDrawerToggle);
    

    onConfigurationChanged 方法中。

    唯一的缺点是抽屉不会在两个方向之间保持其状态(如果它被打开,它将被重新创建并最终以新的方向关闭)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 2020-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多