【问题标题】:ActionBarDrawerToggle icon missing when using AppCompat v22使用 AppCompat v22 时缺少 ActionBarDrawerToggle 图标
【发布时间】:2015-03-16 11:12:08
【问题描述】:

我正在使用 Appcompat v22 为 AutoCompleteTextView 使用有色样式。 然而,一旦我改变了我的 build.gradle:

compile 'com.android.support:support-v4:21.0.3'
compile 'com.android.support:appcompat-v7:21.0.3'
compile 'com.android.support:cardview-v7:21.0.2'
compile 'com.android.support:recyclerview-v7:21.0.2'

对此:

compile 'com.android.support:support-v4:22.0.0'
compile 'com.android.support:appcompat-v7:22.0.0'
compile 'com.android.support:gridlayout-v7:22.0.0'
compile 'com.android.support:cardview-v7:22.0.0'

ActionBarDrawerToggle 图标(汉堡图标)丢失。 (但是,如果我从左边滑动,抽屉就会露出来)

onCreate() 内部:

    mDrawerLayout = (BBDrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.string.drawer_open, R.string.drawer_close) {
        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
            toolbar.setTitle(mTitle);
            invalidateOptionsMenu();
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);
            trackEvent(TrackingAware.MENU_SHOWN, null);
            toolbar.setTitle(mDrawerTitle);
            invalidateOptionsMenu();
        }
    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);

也调用了syncState()

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    if (mDrawerToggle != null) {
        mDrawerToggle.syncState();
    }
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    if (mDrawerToggle != null) {
        mDrawerToggle.onConfigurationChanged(newConfig);
    }
}

如果我将 appcompat 版本降级回 21.0.3,一切都会开始工作。

【问题讨论】:

  • 当你说“一切都开始工作”时,你是在说图标吗?
  • 是的,然后图标在工具栏中可见。
  • 这里也一样,WTF 谷歌???记录下来!

标签: android android-appcompat android-toolbar


【解决方案1】:

相关部分在最后一行代码中,我的Activity.onCreate(..)方法中有它们:

    _drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, 0, 0);
    drawerLayout.setDrawerListener(_drawerToggle);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

我记得该行也有文档记录,但在 appcompat v21 中它们被忽略了(或者至少默认值不同..)

【讨论】:

  • 谢谢!帮了大忙!
  • 我也遇到了同样的问题。似乎使主页按钮显示的唯一方法是调用 setDisplayHomeAsUpEnabled(true)。当我这样做时,我会看到汉堡图标,当我单击它时,它充当后退按钮。我完全糊涂了。
  • 这似乎并不能解决我的问题。我已经在打电话了:getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true);
  • 想通了,我使用的是已弃用的 v4 AppCompat ActionBarDrawerToggle,我升级到 v7 现在可以使用了
【解决方案2】:

对于那些遇到与 Dapp 相同的问题(切换显示返回箭头而不是汉堡图标)的人,这很可能是因为您在 Activity 中缺少drawerToggle.syncState()

更具体地说,您必须像这样覆盖 onPostCreate() 方法:

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    drawerToggle.syncState();
}

这不是唯一需要重写的方法。有关更多详细信息,请参阅 jpardogo 的this post

【讨论】:

    【解决方案3】:

    还要确保在您的操作栏上使用正确的主题...如果您的操作栏是黑色的,默认图标可能是黑色的,除非您这样做: "@style/ThemeOverlay.AppCompat.Dark.ActionBar"

    它咬了我一口,但只在 Android 4.x 设备上(5.x+ 工作得很好奇怪)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多