Android
FloatingActionButton
Поиск…
Вступление
Кнопка плавающего действия используется для особого типа продвигаемого действия, по умолчанию оно анимируется на экране как расширяющийся кусок материала. Значок внутри него может быть анимированным, также FAB может двигаться иначе, чем другие элементы пользовательского интерфейса из-за их относительной важности. Кнопка плавающего действия представляет основное действие в приложении, которое может просто инициировать действие или перемещаться где-нибудь.
параметры
параметр | подробность |
---|---|
android.support.design:elevation | Значение высоты для FAB. Может быть ссылкой на другой ресурс в форме «@ [+] [package:] type / name» или атрибут темы в форме «? [Package:] type / name». |
android.support.design:fabSize | Размер для FAB. |
android.support.design:rippleColor | Цвет пульсации для FAB. |
android.support.design:useCompatPadding | Включить прошивку. |
замечания
Кнопки с плавающим действием используются для специального типа продвигаемого действия. Они отличаются кружком плавающим значком над UI и имеют специальные поведения движения, связанные с морфинг, запуска и передающей точкой привязки.
Для отображения наиболее частого действия рекомендуется использовать только одну кнопку плавающего действия.
Перед использованием FloatingActionButton
вы должны добавить зависимость библиотеки поддержки дизайна в файле build.gradle
:
dependencies {
compile 'com.android.support:design:25.1.0'
}
Официальная документация:
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
Технические характеристики материалов:
https://material.google.com/components/buttons-floating-action-button.html
Как добавить FAB к макету
Чтобы использовать FloatingActionButton, просто добавьте зависимость в файле build.gradle
как описано в разделе примечаний.
Затем добавьте в макет:
<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" />
Пример:
цвет
Цвет фона этого представления по умолчанию соответствует цвету вашей темы.
В приведенном выше изображении, если src
указывает только на значок + (по умолчанию 24x24 dp), чтобы получить фоновый цвет полного круга, вы можете использовать app:backgroundTint="@color/your_colour"
Если вы хотите изменить цвет кода, который вы можете использовать,
myFab.setBackgroundTintList(ColorStateList.valueOf(your color in int));
Если вы хотите изменить цвет FAB в нажатом состоянии, используйте
mFab.setRippleColor(your color in int);
позиционирование
Рекомендуется установить минимум 16dp с края на мобильном устройстве и минимум 24dp на планшет / рабочий стол.
Примечание . После того, как вы установите src, за исключением того, чтобы покрыть всю область FloatingActionButton
убедитесь, что у вас есть правильный размер этого изображения, чтобы получить лучший результат.
Размер круга по умолчанию - 56 x 56dp
Размер мини-круга: 40 x 40dp
Если вы хотите изменить только значок «Интерьер», используйте значок 24 x 24dp для размера по умолчанию
Показать и скрыть FloatingActionButton на прокрутке
Чтобы показать и скрыть FloatingActionButton
с анимацией по умолчанию, просто вызовите методы show()
и hide()
. Хорошая практика - сохранять FloatingActionButton
в макете Activity вместо того, чтобы помещать его во Фрагмент, это позволяет работать с анимацией по умолчанию при показе и скрытии.
Вот пример с ViewPager
:
- Три вкладки
- Показать
FloatingActionButton
для первой и третьей вкладки - Скрыть
FloatingActionButton
на средней вкладке
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();
}
}
});
}
}
Результат:
Показать и скрыть FloatingActionButton на прокрутке
Начиная с версии Support Library версии 22.2.1, можно показать и скрыть FloatingActionButton из поведения прокрутки с помощью подкласса FloatingActionButton.Behavior
который использует методы show()
и hide()
.
Обратите внимание, что это работает только с CoordinatorLayout в сочетании с внутренними представлениями, которые поддерживают вложенную прокрутку, например RecyclerView и NestedScrollView .
Этот класс ScrollAwareFABBehavior
поставляется с Android Guides на Codepath (cc-wiki с требуемой атрибуцией)
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();
}
}
}
В макете FloatingActionButton xml укажите app:layout_behavior
с полным именем класса ScrollAwareFABBehavior
:
app:layout_behavior="com.example.app.ScrollAwareFABBehavior"
Например, с помощью этого макета:
<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>
Вот результат:
Настройка поведения FloatingActionButton
Вы можете установить поведение FAB в XML.
Например:
<android.support.design.widget.FloatingActionButton
app:layout_behavior=".MyBehavior" />
Или вы можете программно использовать:
CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
p.setBehavior(xxxx);
fab.setLayoutParams(p);