Chciałbym utworzyć pływający przycisk akcji (aby dodać elementy do widoku listy), taki jak kalendarz Google, zachowując zgodność z wersjami Androida sprzed wersji Lollipop (przed 5.0).
Stworzyłem ten układ:
Aktywność 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>
Rysowany 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>
Rezultat jest podobny, ale nie ma cieniowania, charakterystycznego dla Material Design:
Pływający przycisk akcji kalendarza:
Pływający przycisk akcji mojej aplikacji:
Jak mogę dodać cieniowanie do mojego przycisku?
Użyłem już podniesienia atrybutu, ale nie działa
Odpowiedzi:
Nie ma już potrzeby tworzenia własnego FABa ani korzystania z biblioteki innej firmy, zostało to uwzględnione w AppCompat 22.
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
Po prostu dodaj nową bibliotekę wsparcia o nazwie projektowanie w swoim pliku gradle:
... i jesteś gotowy:
<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" />
źródło
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).
Generalnie używałem elementów rysunkowych XML do tworzenia cienia / elewacji na widżecie pre-lollipop. Tutaj, na przykład, jest plik XML do rysowania, którego można używać na urządzeniach typu pre-Lollipop do symulowania podniesienia pływającego przycisku akcji.
<?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>
W jej miejsce
?attr/colorPrimary
możesz wybrać dowolny kolor. Oto zrzut ekranu z wynikiem:źródło
Istnieje kilka bibliotek, które dodają FAB (Floating Action Button) do Twojej aplikacji. Oto kilka z nich, które znam.
makovkastar's FAB
FAB kompozytowe futuersimple
Biblioteka Material Design, która zawiera również FAB
Wszystkie te biblioteki są obsługiwane na urządzeniach typu pre-Lollipop, minimum do API 8
źródło
Oto jedna dodatkowa bezpłatna biblioteka pływających przycisków akcji dla Androida Ma wiele dostosowań i wymaga SDK w wersji 9 i nowszej
Pełne wideo demonstracyjne
źródło
Kod xml @Justina Pollarda działa naprawdę dobrze. Na marginesie możesz dodać efekt tętnienia za pomocą następujących linii XML.
<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>
źródło
Wypróbuj tę bibliotekę , obsługuje cień, istnieje
minSdkVersion=7
i obsługuje niejawnieandroid:elevation
atrybut dlaAPI-21
.Oryginalny post jest tutaj .
źródło
Dodaj dopełnienie i wysokość:
źródło