Подтвердить что ты не робот

Значок ActionBarDrawerToggle отсутствует при использовании AppCompat v22

Я использую 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, все начнет работать.

4b9b3361

Ответ 1

Соответствующая часть находится в последней строке кода, я имею их в моем методе Activity.onCreate(..):

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

Как я помню, эта строка также документирована, но в appcompat v21 они были проигнорированы (или, по крайней мере, значение по умолчанию было другим).

Ответ 2

Для тех, кто сталкивается с той же проблемой, что и Dapp (переключается, показывая стрелку назад вместо значка гамбургера), это, скорее всего, потому, что в вашей деятельности отсутствует drawerToggle.syncState().

Чтобы быть более конкретным, вы должны переопределить метод onPostCreate() следующим образом:

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

Это не единственный метод, который нужно переоценить. Подробнее см. этот пост jpardogo.

Ответ 3

также не забудьте использовать нужную тему на панели действий... если ваш экран действия темный, значок по умолчанию может быть черным, если вы этого не сделаете: "@Стиль/ThemeOverlay.AppCompat.Dark.ActionBar"

Это немного меня, но только на устройствах Android 4.x(5.x + работало нормально как-то странно)