Je mets à jour mon application avec la nouvelle barre d’outils de la bibliothèque de support v21. Mon problème est que la barre d’outils ne jette aucune ombre si je ne définis pas l’atsortingbut “élévation”. Est-ce le comportement normal ou je fais quelque chose de mal?
Mon code est:
. . .
Et dans ma méthode Activity – OnCreate:
Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar);
J’ai fini par définir ma propre ombre scope pour la barre d’outils, pensant qu’elle pourrait être utile pour ceux qui la recherchent:
@ drawable / toolbar_dropshadow:
@ color / color_alizarin
#e74c3c
Google a publié la bibliothèque Design Support il y a quelques semaines et il existe une solution astucieuse pour résoudre ce problème dans cette bibliothèque.
Ajoutez la bibliothèque Design Support en tant que dépendance dans build.gradle
:
comstack 'com.android.support:design:22.2.0'
Ajoutez AppBarLayout
fourni par la bibliothèque en tant que wrapper autour de la disposition de votre Toolbar
pour générer une ombre scope.
Voici le résultat:
Il y a beaucoup d’autres astuces avec la bibliothèque d’aide à la conception.
Vous ne pouvez pas utiliser l’atsortingbut d’élévation avant API 21 (Android Lollipop). Vous pouvez cependant append l’ombre par programmation, par exemple en utilisant une vue personnalisée placée sous la barre d’outils.
@ mise en page / barre d’outils
@ drawable / toolbar_dropshadow
dans la disposition de votre activité
Cela a très bien fonctionné pour moi:
Utilisez les dossiers / values pour appliquer le style d’ombre correct basé sur la version du système d’exploitation.
Pour les périphériques de moins de 5,0 , utilisez /values/styles.xml pour append windowContentOverlay au corps de votre activité:
Ajoutez ensuite votre propre ombre personnalisée en modifiant votre thème pour inclure:
- @drawable/bottom_shadow
Vous pouvez saisir la ressource shadow de l’application IO de Google ici: https://github.com/google/iosched/blob/master/android/src/main/res/drawable-xxhdpi/bottom_shadow.9.png
Pour les périphériques 5.0 et ultérieurs , utilisez /values-v21/styles.xml pour append une élévation à votre barre d’outils en utilisant un style d’en-tête personnalisé:
Notez que dans le second cas, je devais créer un style MyViewArea vide pour que windowContentOverlay ne s’affiche pas aussi.
[Mise à jour: modification des noms de ressources et ajout de Google shadow.]
Si vous définissez la barre d’outils comme ActionBar
appelez simplement:
getSupportActionBar().setElevation(YOUR_ELEVATION);
Remarque: ceci doit être appelé après setSupportActionBar(toolbar);
Mon problème est que la barre d’outils ne jette aucune ombre si je ne définis pas l’atsortingbut “élévation”. Est-ce le comportement normal ou je fais quelque chose de mal?
C’est le comportement normal. Voir aussi la FAQ à la fin de cet article .
J’y ai joué pendant des heures, voici ce qui a fonctionné pour moi.
Supprimez tous les atsortingbuts d’ elevation
des widgets appBarLayout
et Toolbar
(y compris styles.xml
si vous appliquez un style).
Maintenant dans l’activité, appliquez l’ elvation
sur votre actionBar
:
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setElevation(3.0f);
Cela devrait fonctionner.
Vous pouvez également le faire fonctionner avec RelativeLayout
. Cela réduit un peu l’imbrication de la mise en page;)
actionbar_background.xml
-
-
append à l’arrière-plan actionbar_style
name = "displayOptions"> useLogo | showHome | showTitle | showCustom
append à Basetheme
Pour 5.0 +: Vous pouvez utiliser AppBarLayout avec la barre d’outils. AppBarLayout a l’atsortingbution “d’élévation”.
J’ai eu un problème similaire avec l’ombre. L’ombre est dessinée par le parent direct d’AppBarLayout dans mon cas. Si la hauteur du parent est la même que celle de AppBarLayout, l’ombre ne peut pas être dessinée. Donc, vérifier la taille de la mise en page parent et peut-être le remake de la mise en page peut résoudre le problème. https://www.reddit.com/r/androiddev/comments/6xddb0/having_a_toolbar_as_a_fragment_the_shadow/