Ich möchte eine schwebende Aktionsschaltfläche (um Elemente zu einer Listenansicht hinzuzufügen) wie Google Kalender erstellen, um die Kompatibilität mit Android-Versionen vor Lollipop (vor 5.0) zu gewährleisten.
Ich habe dieses Layout erstellt:
Aktivität main_activity.xml:
<LinearLayout ... >
<include
layout="@layout/toolbar"/>
<RelativeLayout ... >
<!-- My rest of the layout -->
<!-- Floating action button -->
<ImageButton style="@style/AppTheme"
android:layout_width="60dp"
android:layout_height="60dp"
android:text="New Button"
android:id="@+id/button"
android:src="@drawable/ic_fab"
android:background="@drawable/fab"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_marginBottom="24dp"
android:layout_marginRight="24dp"/>
</RelativeLayout>
</LinearLayout>
Drawable fab.xml:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#ffa48bc0"/>
</shape>
Style styles.xml
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">#ff1d79b1</item>
<item name="colorPrimaryDark">#ff084d95</item>
</style>
</resources>
Das Ergebnis ist ähnlich, aber es gibt keine Schattierung, ein Merkmal des Materialdesigns:
Die schwebende Aktionstaste des Kalenders:
Die schwebende Aktionstaste meiner App:
Wie kann ich die Schattierung zu meiner Schaltfläche hinzufügen?
Ich habe das Attribut Elevation bereits verwendet, funktioniert aber nicht
Antworten:
Es ist nicht mehr erforderlich, ein eigenes FAB zu erstellen oder eine Bibliothek eines Drittanbieters zu verwenden. Es wurde in AppCompat 22 aufgenommen.
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
Fügen Sie einfach die neue Unterstützungsbibliothek namens design in Ihre gradle-Datei ein:
... und du kannst loslegen:
<android.support.design.widget.FloatingActionButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom" android:layout_margin="16dp" android:clickable="true" android:src="@drawable/ic_happy_image" />
quelle
The background color of this view defaults to the your theme's colorAccent. If you wish to change this at runtime then you can do so via setBackgroundTintList(ColorStateList).
Ich habe im Allgemeinen XML-Drawables verwendet, um Schatten / Höhen in einem Pre-Lollipop-Widget zu erstellen. Hier ist zum Beispiel eine XML-Zeichnung, die auf Pre-Lollipop-Geräten verwendet werden kann, um die Höhe der schwebenden Aktionstaste zu simulieren.
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:top="8px"> <layer-list> <item> <shape android:shape="oval"> <solid android:color="#08000000"/> <padding android:bottom="3px" android:left="3px" android:right="3px" android:top="3px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#09000000"/> <padding android:bottom="2px" android:left="2px" android:right="2px" android:top="2px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#10000000"/> <padding android:bottom="2px" android:left="2px" android:right="2px" android:top="2px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#11000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#12000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#13000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#14000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#15000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#16000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> <item> <shape android:shape="oval"> <solid android:color="#17000000"/> <padding android:bottom="1px" android:left="1px" android:right="1px" android:top="1px" /> </shape> </item> </layer-list> </item> <item> <shape android:shape="oval"> <solid android:color="?attr/colorPrimary"/> </shape> </item> </layer-list>
Anstelle von können
?attr/colorPrimary
Sie eine beliebige Farbe wählen. Hier ist ein Screenshot des Ergebnisses:quelle
Es gibt eine Reihe von Bibliotheken, die Ihrer App einen FAB (Floating Action Button) hinzufügen. Hier sind einige davon, die ich kenne.
Makovkastars FAB
Futuersimple's Composite FAB
Material Design Bibliothek, die auch FAB enthält
Alle diese Bibliotheken werden auf Pre-Lollipop-Geräten unterstützt, mindestens API 8
quelle
Hier ist eine zusätzliche frei schwebende Action Button-Bibliothek für Android. Sie hat viele Anpassungen und erfordert SDK Version 9 und höher
Vollständiges Demo-Video
quelle
@ Justin Pollard XML-Code funktioniert wirklich gut. Als Randnotiz können Sie mit den folgenden XML-Zeilen einen Ripple-Effekt hinzufügen.
<item> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="?android:colorControlHighlight" > <item android:id="@android:id/mask"> <shape android:shape="oval" > <solid android:color="#FFBB00" /> </shape> </item> <item> <shape android:shape="oval" > <solid android:color="@color/ColorPrimary" /> </shape> </item> </ripple> </item>
quelle
Probieren Sie diese Bibliothek aus , sie unterstützt Schatten, es gibt
minSdkVersion=7
und unterstützt auchandroid:elevation
Attribute fürAPI-21
implizit.Der ursprüngliche Beitrag ist hier .
quelle
Polsterung und Höhe hinzufügen:
quelle