web-dev-qa-db-fra.com

Comment styler DrawerArrowToggle à partir de la bibliothèque appcompat v7 21 Android

Alors maintenant qu'Android 5.0 est sorti, je me demandais comment styliser les icônes animées de la barre d'actions.

Cette bibliothèque ici la met en œuvre et la stylise, mais comme la bibliothèque appcompat v7 la propose, comment peut-elle être stylée?

Cela a été implémenté avec DrawerToggle v7. Cependant, je ne peux pas le nommer. S'il vous plaît aider

J'ai trouvé le style pour cela dans la 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>

J'ai ajouté cela à mes styles et je n'ai pas fonctionné. Également ajouté à mon 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>

Mais se bloque et dit une erreur de type de couleur en le faisant. Qu'est-ce que je rate?

30
Bignadad

Ce qui suit fonctionne pour moi:

<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>
95
Chris Banes

Dans mon cas, je voulais changer la couleur de la flèche du tiroir et de l’icône du hamburger . Régler le style de la flèche du tiroir ne changeait que la couleur de l’icône du hamburger.

J'ai donc ouvert le style Widget.AppCompat.DrawerArrowToggle dans values.xml de appcompat-v7.

<style name="Widget.AppCompat.DrawerArrowToggle" parent="Base.Widget.AppCompat.DrawerArrowToggle">
    <item name="color">?attr/colorControlNormal</item>
</style>

J'ai donc créé un thème spécial:

<style name="Toolbar_Theme">
    <item name="colorControlNormal">@Android:color/black</item>
</style>

et l'a appliqué à ma barre d'outils comme suit:

<Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    app:theme="@style/Toolbar_Theme" />

Notez que j'utilise themeattribut au lieu de définir controlColorNormal dans mon thème d'application. De cette façon, la couleur s'appliquera uniquement aux éléments de la barre d'outils. Si je la configure dans le thème de l'application, elle affectera également la couleur des barres de défilement, etc.

La définition de l’attribut colorControlNormal change à la fois la couleur du hamburger et la flèche du tiroir.

24
marwinXXII

Pour ceux qui se retrouvent ici (comme je l'ai fait) à la recherche d'un moyen de remplacer l'icône d'indicateur de tiroir par votre propre dessin (non animé) à l'aide de la v7 ActionBarDrawerToggle, vous pouvez procéder comme suit:

//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);
        }
    }
});
3
Mateus Gondim

Pour mon cas, la thématisation de la barre d’action était pertinente pour basculer entre une icône de hamburger blanc et noir:

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

vs.

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

Je voulais faire le hamburguer/arrow white, mais rien de tout ce "style" n'a fonctionné pour moi . J'ai enlevé tout et en ajoutant cette ligne il suffit de le résoudre, en tant qu'attribut du "L'élément Android.support.v7.widget.Toolbar" dans la mise en page

Android: theme = "@ style/ThemeOverlay.AppCompat.Dark.ActionBar

0
Ernesto Vega