Значок 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);