Как стилизовать 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, это работает для меня