50

Der Titel ist ziemlich selbsterklärend.Wie füge ich Schatten zu dem FAB hinzu, der mit der Android-Support-Design-Bibliothek geliefert wird?

Der folgende Code rendert den Schatten nicht unter dem Floating Action Button. Was kann getan werden, um Schatten zu rendern? Wird diese Funktion auch in API 21+ nicht unterstützt?

<android.support.design.widget.FloatingActionButton 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:src="@drawable/ic_add" 
    android:clickable="true" /> 

Hinweis: android:elevation Hinzufügen nicht fügen Schatten auf API 21.

Example screenshot

Screenshot aus dem Beispiel von dandar3 genommen: https://github.com/dandar3/android-support-design

+0

Mindestens für 21+, kann dies gelten: https://StackOverflow.com/Questions/27080338/android-5-0-androilevation-works-for-view-but-not-button – CommonsWare

+1

Etwas, was ich dachte, aber Das Entfernen des StateListAnimator bringt keinen Schatten zurück. Dies liegt möglicherweise an der Tatsache, dass der FAB eigentlich ein erweitertes ImageView und kein Button ist. Seltsam, weil FAB tatsächlich einen StateListAnimator hat. –

Antwort

90

einfach app:borderWidth="0dp" beheben Sie dieses Fragen für mich Einstellung .

Hinweis: vergessen Sie nicht, xmlns:app="http://schemas.android.com/apk/res-auto" zu Ihrem Root-Layout hinzuzufügen.

Diese issue sollte in der nächsten Version der Android-Design-Bibliothek behoben werden.

+1

Wow, das funktioniert tatsächlich ... seltsames Verhalten. Ich kann mir nicht vorstellen, dass dies erwartetes Verhalten ist. –

+0

Funktioniert auch für mich. Warum funktioniert das? – Thorinside

+5

@Thorinside das ist ein Fehler, ein quadratischer Fehler: https://code.google.com/p/android/issues/detail?id=175067 –

26

Für API 21+ müssen Sie app:borderWidth="0dp" und app:elevation="[number]dp" einstellen. Einstellen Höhe Sie die Größe der Schatten geben, die Sie wollen:

Example of values for parameter "elevation"

Hier ein Beispiel-Code für API ist 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"> 

Eine wichtige Sache zu erinnern, für APIs unter 21 (Android 4), ist für Begriffe der Kompatibilität FAB wird eine Marge um Ihre Schaltfläche setzen, um den Schatten zu zeichnen. Dann sollten Sie etwas tun (ich zur Zeit diesen Code und Werken bin mit):

<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"> 

Ich ziehe xmlns:app="http://schemas.android.com/apk/res-auto" am Anfang des XML zu setzen, aber ich habe es nur daran erinnern;]

3

Wenn dies immer noch nicht funktioniert für einige gibt es einen signifikanten Unterschied zwischen ist:

app:elevation="6dp" 
app:borderWidth="0dp" 

und

app:borderWidth="0dp" 
app:elevation="6dp" 

Auftrag scheint aus irgendeinem Grund (Der erste Auftrag arbeitet, die zweite nicht), und dies ist von der Support-Bibliothek 23.3.0

3

überprüfen Manifest in Projekt oder Bibliotheken in Anwendungs ​​Tag und löschen sie

Materie
android:hardwareAccelerated="false" 
android:largeHeap="true" 

Aber wenn Sie diese Optionen müssen dann Schatten und Transformationsanimationen werden nicht funktionieren

3

ich das gleiche Problem wurde erlebt und ich habe es durch das Löschen dieses Tages von meinem AndroidManifest.xml zu arbeiten.

android:hardwareAccelerated="false" 

Ich habe es zunächst zusammen mit android:largeHeap="true", weil ich dachte, dass ich es für eine HeatMap benötigt, in denen eine große Anzahl von Punkten, wo gezeigt wird, aber dann merkte ich es nur mit android:largeHeap="true" arbeiten kann.

Verwandte Themen