Alors maintenant qu'Android 5.0 est sorti, je me demandais comment implémenter les icônes de la barre d'action animée.
Cette bibliothèque l' implémente ici très bien pour moi, mais puisque la bibliothèque appcompat v7 l'a, comment peut-elle être implémentée?
La bibliothèque y fait référence dans themes.xml
<item name="drawerArrowStyle">@style/Widget.AppCompat.DrawerArrowToggle</item>
Sous ce style
<style name="Base.V7.Theme.AppCompat" parent="Platform.AppCompat">
METTRE À JOUR
Je l'ai implémenté en utilisant le DrawerToggle v7. Cependant, je ne peux pas le styliser. Veuillez aider
J'ai trouvé le style pour cela dans le 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?
mDrawerToggle.syncState();
corrigé.Cannot resolve method setSupportActionBar(android.widget.Toolbar)
. J'ai aussi essayé avecandroid.support.v7.toolbar
. Est-ce que quelqu'un sait pourquoi cela se produit?setSupportActionBar(mToolbar);
et aussi défini<item name="spinBars">true</item>
mais l'animation ne fonctionne pasSi vous utilisez la bibliothèque de support fournie DrawerLayout comme suggéré dans la formation Création d'un tiroir de navigation , vous pouvez utiliser le nouveau fichier android.support. v7 .app.ActionBarDrawerToggle (note: différent de android.support. v4 .app.ActionBarDrawerToggle désormais obsolète ):
Bien que la formation n'ait pas été mise à jour pour prendre en compte la dépréciation / la nouvelle classe, vous devriez pouvoir l'utiliser presque exactement le même code - la seule différence dans sa mise en œuvre est le constructeur.
la source
ActionBarDrawerToggle
. La réponse canonique du créateur d'AppCompat a un exemple complet de la manière dont votre XML doit être structuré.J'ai créé une petite application qui avait des fonctionnalités similaires
Activité principale
Mon XML de cette activité
Ma barre d'outils personnalisée XML
Mon style de thème
Mes styles dans values-v21
la source
Pour répondre à la partie mise à jour de votre question: pour styliser l'icône / la flèche du tiroir, vous avez deux options:
Style de la flèche elle-même
Pour ce faire, remplacez
drawerArrowStyle
votre thème comme suit:Ce n'est probablement pas ce que vous voulez , car l'ActionBar lui-même devrait avoir un style cohérent avec la flèche, donc, très probablement, vous voulez l'option deux:
Thème l'ActionBar / Toolbar
Remplacez l' attribut
android:actionBarTheme
(actionBarTheme
for appcompat) du thème d'application global avec votre propre thème (dont vous devriez probablement dériverThemeOverlay.Material.ActionBar/ThemeOverlay.AppCompat.ActionBar
) comme suit:Une note importante ici est que lorsque vous utilisez une mise en page personnalisée avec une
Toolbar
implémentation ActionBar au lieu de stock (par exemple, si vous utilisez le comboDrawerLayout
-NavigationView
-Toolbar
pour obtenir l'effet de tiroir de style Material là où il est visible sous la barre d'état translucide), l'actionBarTheme
attribut n'est évidemment pas ramassé automatiquement (car il est censé être pris en charge par leAppCompatActivity
par défautActionBar
), donc pour votre personnalisation,Toolbar
n'oubliez pas d'appliquer votre thème manuellement:- cela résoudra soit la valeur par défaut d'AppCompat,
ThemeOverlay.AppCompat.ActionBar
soit votre remplacement si vous définissez l'attribut dans votre thème dérivé.PS un petit commentaire sur le
drawerArrowStyle
remplacement et l'spinBars
attribut - que de nombreuses sources suggèrent qu'il devrait être réglétrue
pour obtenir l'animation tiroir / flèche. Le fait est quespinBars
c'esttrue
par défaut dans AppCompat (vérifiez leBase.Widget.AppCompat.DrawerArrowToggle.Common
style), vous n'avez pas du tout à remplaceractionBarTheme
pour que l'animation fonctionne. Vous obtenez l'animation même si vous la remplacez et définissez l'attribut surfalse
, c'est juste une animation différente, moins sinueuse. L'important ici est d'utiliserActionBarDrawerToggle
, c'est ce qui attire le dessin animé fantaisie.la source
Je veux corriger un peu le code ci-dessus
et toutes les autres choses resteront les mêmes ...
Pour ceux qui ont des problèmes de
Drawerlayout
superposition de la barre d'outilsajouter
android:layout_marginTop="?attr/actionBarSize"
à la disposition racine du contenu du tiroirla source
getSupportActionBar()
quand vous venez de prolongerActivity
?ActionBarActivity