Le titre est assez explicite.
Le code suivant ne rend pas l'ombre sous le bouton d'action flottante. Que peut-on faire pour rendre l'ombre? Cette fonctionnalité n'est-elle vraiment pas prise en charge même sur API 21+?
<Android.support.design.widget.FloatingActionButton
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:src="@drawable/ic_add"
Android:clickable="true" />
Remarque: L'ajout de Android:elevation
n'ajoute pas d'ombre à l'API 21.
Capture d'écran tirée de l'exemple de dandar3: https://github.com/dandar3/Android-support-design
Il suffit de définir app:borderWidth="0dp"
pour résoudre ces problèmes pour moi.
Remarque: n'oubliez pas d'ajouter xmlns:app="http://schemas.Android.com/apk/res-auto"
à votre mise en page racine.
Ce problème devrait être corrigé dans la prochaine version de la bibliothèque de conceptions Android.
Pour API 21+, vous devez définir app:borderWidth="0dp"
et app:elevation="[number]dp"
. En définissant l’altitude, vous donnez la taille d’ombre souhaitée:
Voici un exemple de code pour API 21+:
<Android.support.design.widget.FloatingActionButton
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/locate_user_FAB"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/location_off"
app:elevation="6dp"
app:borderWidth="0dp"
Android:layout_above="@+id/take_taxi_FAB"
app:backgroundTint="@color/colorAccentGrey">
Une chose importante à retenir pour les API inférieures à 21 (Android 4), c’est pour les conditions de compatibilité que FAB mettra une marge autour du bouton pour dessiner l’ombre. Ensuite, vous devriez faire quelque chose comme ça (j'utilise actuellement ce code et ça marche):
<Android.support.design.widget.FloatingActionButton
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/locate_user_FAB"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:src="@drawable/location_off"
app:elevation="6dp"
app:borderWidth="0dp"
Android:layout_above="@+id/take_taxi_FAB"
Android:layout_alignParentRight="true"
Android:layout_marginRight="@dimen/map_FAB_marginRight"
Android:layout_marginBottom="@dimen/locate_user_FAB_marginBottom"
app:backgroundTint="@color/colorAccentGrey">
Je préfère mettre xmlns:app="http://schemas.Android.com/apk/res-auto"
au début du XML, mais je ne le fais que pour vous le rappeler;]
Si cela ne fonctionne toujours pas pour certains, il y a une différence significative entre:
app:elevation="6dp"
app:borderWidth="0dp"
et
app:borderWidth="0dp"
app:elevation="6dp"
L'ordre semble avoir de l'importance pour une raison quelconque (le premier ordre fonctionne, le second ne fonctionne pas) et cela provient de la bibliothèque de support 23.3.0
J'éprouvais le même problème et je l'ai obtenu en supprimant cette balise de mon AndroidManifest.xml.
Android:hardwareAccelerated="false"
Je l'ai d'abord ajouté, avec Android:largeHeap="true"
, parce que je pensais en avoir besoin pour une carte thermique dans laquelle un grand nombre de points étaient affichés, mais j'ai ensuite réalisé que cela pouvait fonctionner uniquement avec Android:largeHeap="true"
.
Vérifier le manifeste dans le projet ou les bibliothèques dans la balise d'application et delete them
Android:hardwareAccelerated="false"
Android:largeHeap="true"
Mais si vous avez besoin de ces options, les ombres et les animations de transformation ne fonctionneront pas.
Au cas où cela aiderait, j'utilisais
Android:tint="@color/myColor"
au lieu de
Android:backgroundTint="@color/myColor".
Remplacer teinte par backgroundTint a ramené l'ombre.