2014-10-18 2 views
27

Итак, теперь, когда был выпущен Android 5.0, мне было интересно, как стилизовать значки анимированных значков.Как стилизовать DrawerArrowToggle из Android appcompat v7 21 library

Эта библиотека here реализует и стилирует это хорошо для меня, но так как библиотека 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

Но сбой и при ошибке указывает на ошибку типа цвета. Что мне не хватает?

ответ

92

следующие работы для меня:

<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> 
+1

Моя базовая тема - голой, а не appcompat. Я не поддерживаю api ниже 15. Переход на тему appcompat для моей базы изменит все. В любом случае я могу это сделать? – Bignadad

+1

Хорошо, я преобразовал все в appcompat, изменил свою активность фрагментации на actionbaractivity, getactionbar на getupportactionbar и создал панель инструментов. Затем я использовал то, что вы поставили выше, и все равно не сработает. даже не меняет цвет или анимировать. что я могу делать неправильно? – Bignadad

+0

Также я рассмотрел вашу работу (это замечательно) здесь https://chris.banes.me/2014/10/17/appcompat-v21/, но до сих пор не повезло. – Bignadad

-1

Ваше имя стиля не имеет родителя Здесь работает с андроид 5 и материалов Тема, без необходимости замены ActionBar с 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

-1

Не уверен, что такое точная ошибка, если вы уже определили цвет, перейдите в attrs.xml для поиска attr name = "color" и переименуйте его или для теста прокомментируйте это, вам может потребоваться изменить свой пользовательский attr на другое имя, не уверен, что это проблема с поддержкой lib, это работает для меня

23

В моем случае я хотел изменить цвет стрелки выдвижного ящика и значок гамбургера. Настройка ящика стиль стрелки изменил только цвет иконок гамбургера.

Итак, я открыл 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" /> 

Обратите внимание, что я использую themeattribute вместо определения controlColorNormal в моя тема приложения. Таким образом, цвет будет применен только к элементам панели инструментов, если я установлю его в теме приложения, тогда он также повлияет на цвет прокрутки и т. Д.

colorControlNormal атрибут изменения цвета гамбургера и ящика стрелка.

+0

Это именно то, что я пытаюсь сделать, но по какой-то причине это ничего не меняет. – Barodapride

3

Для всех, кто заканчивает тем, что здесь (как и я) искал способ заменить значок индикатора ящика с собственным Drawable (не анимированный), используя 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); 
     } 
    } 
}); 
0

для моего случая тематизация из ActionBar была актуальна для переключения между белой и темной иконой гамбургера:

<item name="actionBarWidgetTheme">@style/Theme.AppCompat</item> 

против

<item name="actionBarWidgetTheme">@style/Theme.AppCompat.Light</item> 
0

Я хотел , чтобы сделать hamburguer/arrow white, но ничего из этого не было для меня. я удалил все и Добавив эту строку просто решить эту проблему, как атрибут элемента «android.support.v7.widget.Toolbar» в макете:

андроид: тема = "@ style/ThemeOverlay.AppCompat.Dark.ActionBar