Значок ActionBarDrawerToggle() нельзя установить на ActionBar в Android SDK 5

У меня есть простая проблема с инициализацией моего значка для моей панели действий. Я использую Android SDK 5 и с тех пор android.support.v4.app.ActionBarDrawerToggle; устарела, я импортировал поддержку v7 и заменил мой импорт следующим: android.support.v7.app.ActionBarDrawerToggle;т.е. тот же пакет с v7.

Теперь, когда я инициализирую свой объект ActionBarDrawerToggle, чтобы связать его с моим DrawerLayoutобъект импортирован из: import android.support.v4.widget.DrawerLayout; Я вынужден удалить один аргумент, который выглядит нормально (хотя понятия не имею, почему!). но моя иконка не идет в моем ActionBar. вот моя инициализация для моего объекта ActionBarDrawerToggle:

mActionBarDrawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
            R.drawable.ic_drawer, R.string.drawer_open) {

        /** Called when a drawer has settled in a completely closed state. */
        @Override
        public void onDrawerClosed(View view) {
            super.onDrawerClosed(view);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()

        }

        /** Called when a drawer has settled in a completely open state. */
        @Override
        public void onDrawerOpened(View view) {
            super.onDrawerOpened(view);
            invalidateOptionsMenu(); // creates call to onPrepareOptionsMenu()

        }
    };

У меня есть изображение в моем ресурсе, а именно R.drawable.ic_drawer

Я не могу понять, почему моя иконка не появляется в v7.

PS код работает отлично, на самом деле, когда я переключаюсь обратно на импорт v4 и добавляю дополнительный аргумент для инициализации переключаемого объекта (необходимость обнажать уродливую устаревшую перекрестную линию конечно), значок появляется, но не в v7.

заранее спасибо:)

2 ответа

Решение

На самом деле, если вы посмотрите на javadoc нового v7.ActionBarDrawerToggle, вы поймете, что новый класс не предоставляет конструктор, который принимает Drawable в качестве аргумента - 3-й аргумент, где вы предоставили свой Drawable, - это ресурс String, который описывает открывающийся ящик. Если вы хотите установить пользовательский значок, вы должны использовать другой конструктор ActionBarDrawerToggle:

ActionBarDrawerToggle(Activity activity, DrawerLayout drawerLayout, Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes)

В этом случае значок панели инструментов будет использоваться в качестве значка Drawer.

Хотя v4.ActionBarDrawerToggle устарела, вы можете использовать другой метод, чтобы изменить значок, например ниже:

getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu_drawer);
Другие вопросы по тегам