Pas d’ombre par défaut sur la barre d’outils?

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 

entrer la description de l'image ici

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:

entrer la description de l'image ici

Il y a beaucoup d’autres astuces avec la bibliothèque d’aide à la conception.

  1. http://inthecheesefactory.com/blog/android-design-support-library-codelab/en
  2. http://android-developers.blogspot.in/2015/05/android-design-support-library.html

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é

entrer la description de l'image ici

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/