使用AppCompat v22时缺少ActionBarDrawerToggle图标

Sid*_*ava 24 android android-appcompat android-toolbar

我正在使用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'
Run Code Online (Sandbox Code Playgroud)

对此:

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'
Run Code Online (Sandbox Code Playgroud)

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);
Run Code Online (Sandbox Code Playgroud)

还调用了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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Gia*_* P. 20

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

    _drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, 0, 0);
    drawerLayout.setDrawerListener(_drawerToggle);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

我记得那条线也被记录了,但是在appcompat v21中它们被忽略了(或者至少默认是不同的......)


Ron*_*nan 5

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

更具体地说,您必须覆盖onPostCreate()方法,如下所示:

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    drawerToggle.syncState();
}
Run Code Online (Sandbox Code Playgroud)

这不是唯一需要重写的方法.有关更多详细信息,请参阅jpardogo的这篇文章.