Как стилизовать DrawerArrowToggle из библиотеки Android appcompat v7 21
Итак, теперь, когда был выпущен Android 5.0, мне было интересно, как стилизовать анимированные значки в действии.
Эта библиотека здесь реализует и стилирует это хорошо для меня, но так как библиотека appcompat v7 имеет ее способ ее стилизации?
Я получил это, используя v7 DrawerToggle. Однако я не могу его стилизовать. Пожалуйста, помогите
Я нашел стиль для него в v7 styles_base.xml
<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>
Но при этом происходит сбой и при ошибке указывается ошибка типа цвета. Что мне не хватает?
Ответы
Ответ 1
Для меня работает следующее:
<style name="MyTheme" parent="Theme.AppCompat">
<item name="drawerArrowStyle">@style/MyDrawerArrowToggle</item>
</style>
<style name="MyDrawerArrowToggle" parent="Widget.AppCompat.DrawerArrowToggle">
<item name="color">@color/your_color</item>
</style>
Ответ 2
В моем случае я хотел изменить цвет стрелки выдвижного ящика и значок гамбургера.
Настройка стиля стрелочного ящика изменила только цвет значка гамбургера.
Итак, я открыл стиль Widget.AppCompat.DrawerArrowToggle
в values.xml
appcompat-v7.
<style name="Widget.AppCompat.DrawerArrowToggle" parent="Base.Widget.AppCompat.DrawerArrowToggle">
<item name="color">?attr/colorControlNormal</item>
</style>
Итак, я создал специальную тему:
<style name="Toolbar_Theme">
<item name="colorControlNormal">@android:color/black</item>
</style>
и применил его к моей панели инструментов следующим образом:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
app:theme="@style/Toolbar_Theme" />
Обратите внимание, что я использую theme
атрибут вместо определения controlColorNormal
в моей теме приложения. Таким образом, цвет будет соответствовать только элементам панели инструментов, если я его установлю в теме приложения, тогда это также повлияет на цвет прокрутки и т.д.
Настройка атрибута colorControlNormal
изменяет цвет стрелки гамбургера и стрелки.
Ответ 3
Для всех, кто попадает сюда (как и я), ищет способ заменить значок индикатора ящика с помощью собственного рисования (не анимированного) с помощью v7 ActionBarDrawerToggle, вы можете сделать следующее:
//After instantiating your ActionBarDrawerToggle
mDrawerToggle.setDrawerIndicatorEnabled(false);
Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.your_custom_icon, getActivity().getTheme());
mDrawerToggle.setHomeAsUpIndicator(drawable);
mDrawerToggle.setToolbarNavigationClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mDrawerLayout.isDrawerVisible(GravityCompat.START)) {
mDrawerLayout.closeDrawer(GravityCompat.START);
} else {
mDrawerLayout.openDrawer(GravityCompat.START);
}
}
});
Ответ 4
В моем случае тематика панели действий имела значение для переключения между белым и темным символом гамбургера:
<item name="actionBarWidgetTheme">@style/Theme.AppCompat</item>
против.
<item name="actionBarWidgetTheme">@style/Theme.AppCompat.Light</item>
Ответ 5
У вашего имени стиля нет родителя
Здесь, работая с android 5 и Material Theme, без необходимости заменять панель действий приложением AppCompat
Вот мой стиль, мне просто нужно было изменить цвет на белый, потому что у меня был цветной бар
<style name="myTheme.DrawerArrowToggle" parent="Base.Widget.AppCompat.DrawerArrowToggle">
<item name="color">@color/white</item>
</style>
И вот моя тема
<style name="Theme_AppTheme.Light" parent="@android:style/Theme.Material.Light">
<!-- Drawer\arrow in white -->
<item name="drawerArrowStyle">@style/myTheme.DrawerArrowToggle</item>
пс. там просто проблема, на adroid 4.4, и нормальная панель действий плохо работает.
И к несчастью, nre drawerToggle из v7 не наследуется от v4
Ответ 6
Не уверен, какая точная ошибка, если вы уже определили цвет, перейдите в attrs.xml, найдите attr name= "color" и переименуйте его, или для проверки его комментариев, возможно, вам придется изменить свой пользовательский attr на другой имя, не уверен, что это проблема с поддержкой lib, это работает для меня