Android
FloatingActionButton
Szukaj…
Wprowadzenie
Pływający przycisk akcji służy do specjalnego rodzaju akcji promowanej, domyślnie animuje się na ekranie jako rozszerzający się materiał. Ikona w nim może być animowana, również FAB może poruszać się inaczej niż inne elementy interfejsu użytkownika ze względu na ich względną ważność. Pływający przycisk akcji reprezentuje akcję podstawową w aplikacji, która może po prostu wywołać akcję lub nawigować gdzieś.
Parametry
Parametr | Szczegół |
---|---|
android.support.design:elevation | Wartość wysokości dla FAB. Może być odniesieniem do innego zasobu w postaci „@ [+] [pakiet:] typ / nazwa” lub atrybut motywu w postaci „? [Pakiet:] typ / nazwa”. |
android.support.design:fabSize | Rozmiar dla FAB. |
android.support.design:rippleColor | Kolor marszczenia dla FAB. |
android.support.design:useCompatPadding | Włącz pad dopełnianie. |
Uwagi
Pływające przyciski akcji służą do specjalnego rodzaju akcji promowanej. Wyróżnia je okrągła ikona unosząca się nad interfejsem użytkownika i mają specjalne zachowania ruchowe związane z morfingiem, uruchamianiem i przenoszeniem punktu kontrolnego.
Zalecany jest tylko jeden przycisk akcji pływającej na ekranie, który reprezentuje najczęstszą akcję.
Przed użyciem FloatingActionButton
należy dodać zależność biblioteki obsługi projektu w pliku build.gradle
:
dependencies {
compile 'com.android.support:design:25.1.0'
}
Oficjalna dokumentacja:
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
Specyfikacja projektu materiału:
https://material.google.com/components/buttons-floating-action-button.html
Jak dodać FAB do układu
Aby użyć FloatingActionButton, po prostu dodaj zależność w pliku build.gradle
zgodnie z opisem w sekcji uwag.
Następnie dodaj do układu:
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
android:layout_margin="@dimen/fab_margin"
android:src="@drawable/my_icon" />
Przykład:
Kolor
Domyślnie kolor tła tego widoku odpowiada kolorowi motywu.
Na powyższym obrazie, jeśli src
wskazuje tylko na ikonę + (domyślnie 24x24 dp), aby uzyskać kolor tła pełnego koła, możesz użyć app:backgroundTint="@color/your_colour"
Jeśli chcesz zmienić kolor kodu, którego możesz użyć,
myFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
Jeśli chcesz zmienić kolor FAB w stanie wciśniętym, użyj
mFab.setRippleColor(your color in int);
Pozycjonowanie
Zaleca się umieszczenie minimum 16dp od krawędzi na urządzeniu mobilnym i minimum 24dp na tablecie / komputerze.
Uwaga : Po ustawieniu src, z wyjątkiem objęcia całego obszaru FloatingActionButton
upewnij się, że masz odpowiedni rozmiar tego obrazu, aby uzyskać najlepszy wynik.
Domyślny rozmiar okręgu to 56 x 56dp
Rozmiar mini koła: 40 x 40dp
Jeśli chcesz zmienić tylko ikonę Wnętrze, użyj ikony 24 x 24dp dla domyślnego rozmiaru
Pokaż i ukryj FloatingActionButton po przesunięciu
Aby pokazać i ukryć FloatingActionButton
z domyślną animacją, wystarczy wywołać metody show()
i hide()
. Dobrą praktyką jest trzymanie FloatingActionButton
w układzie działania zamiast umieszczania go we fragmencie, pozwala to domyślnym animacjom działać podczas wyświetlania i ukrywania.
Oto przykład z ViewPager
:
- Trzy karty
- Pokaż
FloatingActionButton
dla pierwszej i trzeciej karty - Ukryj
FloatingActionButton
na środkowej karcie
public class MainActivity extends AppCompatActivity {
FloatingActionButton fab;
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fab = (FloatingActionButton) findViewById(R.id.fab);
viewPager = (ViewPager) findViewById(R.id.viewpager);
// ...... set up ViewPager ............
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
if (position == 0) {
fab.setImageResource(android.R.drawable.ic_dialog_email);
fab.show();
} else if (position == 2) {
fab.setImageResource(android.R.drawable.ic_dialog_map);
fab.show();
} else {
fab.hide();
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
@Override
public void onPageScrollStateChanged(int state) {}
});
// Handle the FloatingActionButton click event:
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = viewPager.getCurrentItem();
if (position == 0) {
openSend();
} else if (position == 2) {
openMap();
}
}
});
}
}
Wynik:
Pokaż i ukryj FloatingActionButton on Scroll
Począwszy od wersji 22.2.1 biblioteki wsparcia, możliwe jest pokazywanie i ukrywanie FloatingActionButton przed przewijaniem za pomocą podklasy FloatingActionButton.Behavior
która wykorzystuje metody show()
i hide()
.
Zauważ, że działa to tylko z CoordinatorLayout w połączeniu z wewnętrznymi widokami, które obsługują zagnieżdżone przewijanie, takie jak RecyclerView i NestedScrollView .
Ta klasa ScrollAwareFABBehavior
pochodzi z Przewodników dla Androida na Codepath (wymagana jest wiki cc-wiki z przypisaniem)
public class ScrollAwareFABBehavior extends FloatingActionButton.Behavior {
public ScrollAwareFABBehavior(Context context, AttributeSet attrs) {
super();
}
@Override
public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
final View directTargetChild, final View target, final int nestedScrollAxes) {
// Ensure we react to vertical scrolling
return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL
|| super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
}
@Override
public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child,
final View target, final int dxConsumed, final int dyConsumed,
final int dxUnconsumed, final int dyUnconsumed) {
super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) {
// User scrolled down and the FAB is currently visible -> hide the FAB
child.hide();
} else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) {
// User scrolled up and the FAB is currently not visible -> show the FAB
child.show();
}
}
}
W app:layout_behavior
XML układu FloatingActionButton określ app:layout_behavior
pomocą w pełni kwalifikowanej nazwy klasy ScrollAwareFABBehavior
:
app:layout_behavior="com.example.app.ScrollAwareFABBehavior"
Na przykład z tym układem:
<android.support.design.widget.CoordinatorLayout
android:id="@+id/main_layout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<android.support.design.widget.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="6dp">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="?attr/colorPrimary"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:elevation="0dp"
app:layout_scrollFlags="scroll|enterAlways"
/>
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
app:tabMode="fixed"
android:layout_below="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"
app:elevation="0dp"
app:tabTextColor="#d3d3d3"
android:minHeight="?attr/actionBarSize"
/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_below="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|end"
app:layout_behavior="com.example.app.ScrollAwareFABBehavior"
android:layout_margin="@dimen/fab_margin"
android:src="@android:drawable/ic_dialog_email" />
</android.support.design.widget.CoordinatorLayout>
Oto wynik:
Ustawianie zachowania FloatingActionButton
Możesz ustawić zachowanie FAB w XML.
Na przykład:
<android.support.design.widget.FloatingActionButton
app:layout_behavior=".MyBehavior" />
Lub możesz ustawić programowo za pomocą:
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setBehavior(xxxx);
fab.setLayoutParams(p);