使用AppCompat v22时ActionBarDrawerToggle图标丢失

24

我正在使用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,一切都能正常工作。

当你说“一切开始运作”时,你是在说图标吗? - Jared Burrows
是的,然后图标就会在工具栏中变得可见。 - Siddharth Srivastava
5
我也有同感,谷歌怎么回事?记录一下吧! - Pedro Paulo Amorim
3个回答

20

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

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

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


谢谢!帮了很大的忙! - Lawrence Gimenez
1
我也遇到了同样的问题。唯一能让主页按钮显示出来的方法似乎是调用 setDisplayHomeAsUpEnabled(true)。当我这样做时,我会看到汉堡图标,当我点击它时,它会作为返回按钮。我感到非常困惑。 - M Dapp
这似乎对我没有解决。我已经调用了:getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); - waterlooalex
搞定了,我使用的是已经弃用的v4 AppCompat ActionBarDrawerToggle,我升级到了v7版本,现在可以工作了。 - waterlooalex

5

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

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

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

这不是唯一需要被重写的方法。请参阅jpardogo的这篇帖子获取更多细节。


0

同时确保在操作栏上使用正确的主题...如果您的操作栏是暗色的,则默认图标可能是黑色的,除非您执行以下操作: "@style/ThemeOverlay.AppCompat.Dark.ActionBar"

这个问题只在Android 4.x设备上出现过(奇怪的是5.x+没有问题)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接