Поиск…


Вступление

Кнопка плавающего действия используется для особого типа продвигаемого действия, по умолчанию оно анимируется на экране как расширяющийся кусок материала. Значок внутри него может быть анимированным, также 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);


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow