Итак, теперь, когда был выпущен Android 5.0, мне было интересно, как реализовать анимированные значки панели действий.
Эта библиотека здесь прекрасно реализует это для меня, но, поскольку библиотека appcompat v7 имеет это, как это можно реализовать?
Библиотека ссылается на него в themes.xml
<item name="drawerArrowStyle">@style/Widget.AppCompat.DrawerArrowToggle</item>
Под этим стилем
<style name="Base.V7.Theme.AppCompat" parent="Platform.AppCompat">
ОБНОВИТЬ
Я реализовал это с помощью v7 DrawerToggle. Однако я не могу его стилизовать. Пожалуйста помоги
Я нашел его стиль в файле style_base.xml v7.
<style name="Base.Widget.AppCompat.DrawerArrowToggle" parent="">
<item name="color">?android:attr/textColorSecondary</item>
<item name="thickness">2dp</item>
<item name="barSize">18dp</item>
<item name="gapBetweenBars">3dp</item>
<item name="topBottomBarArrowSize">11.31dp</item>
<item name="middleBarArrowSize">16dp</item>
<item name="drawableSize">24dp</item>
<item name="spinBars">true</item>
</style>
Я добавил это в свои стили и не работал. Также добавлен в мой attr.xml
<declare-styleable name="DrawerArrowToggle">
<!-- The drawing color for the bars -->
<attr name="color" format="color"/>
<!-- Whether bars should rotate or not during transition -->
<attr name="spinBars" format="boolean"/>
<!-- The total size of the drawable -->
<attr name="drawableSize" format="dimension"/>
<!-- The max gap between the bars when they are parallel to each other -->
<attr name="gapBetweenBars" format="dimension"/>
<!-- The size of the top and bottom bars when they merge to the middle bar to form an arrow -->
<attr name="topBottomBarArrowSize" format="dimension"/>
<!-- The size of the middle bar when top and bottom bars merge into middle bar to form an arrow -->
<attr name="middleBarArrowSize" format="dimension"/>
<!-- The size of the bars when they are parallel to each other -->
<attr name="barSize" format="dimension"/>
<!-- The thickness (stroke size) for the bar paint -->
<attr name="thickness" format="dimension"/>
</declare-styleable>
Но вылетает и при этом сообщает об ошибке цветотипа. Что мне не хватает?
mDrawerToggle.syncState();
исправил это.Cannot resolve method setSupportActionBar(android.widget.Toolbar)
. Я тоже пробовал сandroid.support.v7.toolbar
. кто-нибудь знает, почему это произошло?setSupportActionBar(mToolbar);
и тоже определил,<item name="spinBars">true</item>
но анимация не работаетЕсли вы используете библиотеку поддержки, предоставленную DrawerLayout, как предложено в разделе « Создание панели навигации» , вы можете использовать недавно добавленный android.support. v7 .app.ActionBarDrawerToggle (примечание: отличается от устаревшего android.support. v4 .app.ActionBarDrawerToggle ):
Хотя обучение не было обновлено с учетом устаревшего / нового класса, вы должны иметь возможность использовать его почти точно такой же код - единственная разница в его реализации - это конструктор.
источник
ActionBarDrawerToggle
. В каноническом ответе создателя AppCompat есть полный пример того, как должен быть структурирован ваш XML.Я создал небольшое приложение с похожей функциональностью
Основное занятие
Мой XML этого действия
Моя настраиваемая панель инструментов XML
Мой стиль темы
Мои стили в values-v21
источник
Чтобы ответить на обновленную часть вашего вопроса: чтобы стилизовать значок / стрелку ящика, у вас есть два варианта:
Стиль самой стрелки
Для этого переопределите
drawerArrowStyle
в своей теме так:Вероятно, это не то, что вам нужно , потому что сам ActionBar должен иметь согласованный стиль со стрелкой, поэтому, скорее всего, вам нужен второй вариант:
Тема для панели действий / панели инструментов
Переопределите атрибут
android:actionBarTheme
(actionBarTheme
для appcompat) глобальной темы приложения своей собственной темой (которая, вероятно, должна быть унаследованаThemeOverlay.Material.ActionBar/ThemeOverlay.AppCompat.ActionBar
) следующим образом:Здесь важно отметить, что при использовании пользовательского макета с
Toolbar
реализацией ActionBar вместо стандартной (например, если вы используете комбинациюDrawerLayout
-NavigationView
-Toolbar
для достижения эффекта выдвижного ящика в стиле материала, когда он виден под полупрозрачной панелью состояния),actionBarTheme
атрибут явно не подбирается автоматически (потому что поAppCompatActivity
умолчанию о нем позаботятсяActionBar
), поэтому для вашего индивидуального решенияToolbar
не забудьте применить свою тему вручную:- это разрешит либо значение по умолчанию для AppCompat,
ThemeOverlay.AppCompat.ActionBar
либо ваше переопределение, если вы установите атрибут в производной теме.PS небольшой комментарий о
drawerArrowStyle
переопределении иspinBars
атрибуте, который, как предлагают многие источники, следует установить,true
чтобы получить анимацию ящика / стрелки. Дело в том,spinBars
что этоtrue
по умолчанию в AppCompat (проверьтеBase.Widget.AppCompat.DrawerArrowToggle.Common
стиль), вам вообще не нужно переопределять,actionBarTheme
чтобы анимация заработала. Вы получите анимацию, даже если вы переопределите ее и установите для атрибута значениеfalse
, это просто другая, менее крутая анимация. Здесь важно использоватьActionBarDrawerToggle
, это то, что тянет за собой причудливый анимированный рисунок.источник
Я хочу немного поправить приведенный выше код
а все остальное останется прежним ...
Для тех, у кого проблемы с
Drawerlayout
наложением панели инструментовдобавить
android:layout_marginTop="?attr/actionBarSize"
в корневой макет содержимого ящикаисточник
getSupportActionBar()
когда вы просто расширяетеActivity
?ActionBarActivity