Как использовать настоящую кнопку плавающего действия (FAB) Extended? - PullRequest
0 голосов
/ 15 мая 2018

Для устранения любых сомнений или мыслей о дубликате: на Материальный дизайн определяется, что является «расширенным».

FAB - Extended FAB

Но большинство людей путают «расширенный» с « Тип перехода: Быстрый набор », что затрудняет поиск решений.Как здесь

FAB - Type of Transition: Speed Dial

Вопрос Так что я с нетерпением жду, как настроить FAB с текстоми расширенный размер.

Сегодня мой код выглядит так:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/maps_main_distance_btn"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:text="@string/str_distance_btn"
    app:elevation="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

Но моя кнопка выглядит так:

enter image description here

Нет текста и нет нужного формата.Я использую его в макете ограничений.

Ответы [ 4 ]

0 голосов
/ 23 марта 2019
  1. Добавьте зависимости в своем файле Gradle:
implementation 'com.google.android.material:material:1.1.0-alpha04'

в своем XML-файле:

<com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
            android:id="@+id/fab"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|end"
            android:layout_alignParentBottom="true"
            android:layout_alignParentEnd="true"
            android:layout_margin="@dimen/fab_margin"
            android:text="Create"
            app:icon="@drawable/outline_home_24" />
0 голосов
/ 01 октября 2018

Вы можете использовать эту библиотеку , чтобы сделать это. (Я использовал другой способ) Но я использовал FancyButton , чтобы создать круглую и удивительную кнопку в макете координатора, как показано ниже:

    <mehdi.sakout.fancybuttons.FancyButton
    android:id="@+id/actMain_btnCompare"
    app:layout_behavior="@string/fab_transformation_sheet_behavior"
    android:layout_width="125dp"
    android:layout_height="38dp"
    android:layout_gravity="bottom|center"
    android:layout_margin="20dp"
    android:elevation="3dp"
    android:padding="2dp"
    fancy:fb_borderColor="@color/white"
    fancy:fb_borderWidth="3dp"
    fancy:fb_defaultColor="@color/colorPrimaryDark"
    fancy:fb_radius="20dp"
    fancy:fb_text="مقایسه محصول"
    fancy:fb_textColor="@color/white"
    fancy:fb_textGravity="center"
    fancy:fb_textSize="13sp" />

и результат:

enter image description here

Может иметь значок (см. FancyButton ).

с app:layout_behavior="@string/fab_transformation_sheet_behavior" действует как потрясающий, как показано ниже:

enter image description here

Удачи.

0 голосов
/ 17 октября 2018

enter image description here

Вы можете создать служебный класс, который анимирует MaterialButton в расширенный FloatingActionButton, используя ConstraintLayout.Сначала вам нужно объявить два состояния MaterialButton в xml, а затем использовать TransitionManager для анимации между ними.

Вы можете прочитать средний пост об этом здесь А пока я добавлю здесь биты соответствующего кода.

Свернутое состояние FAB:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout android:id="@+id/extend_fab_container"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_fab"
    android:elevation="8dp">

    <android.support.design.button.MaterialButton
        android:id="@+id/fab"
        style="@style/Widget.MaterialComponents.Button.UnelevatedButton"
        android:layout_width="56dp"
        android:layout_height="56dp"
        app:cornerRadius="56dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

Расширенное состояние FAB:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout android:id="@+id/extend_fab_container"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:elevation="8dp"
    android:background="@drawable/bg_fab">

    <android.support.design.button.MaterialButton
        android:id="@+id/fab"
        style="@style/Widget.MaterialComponents.Button.UnelevatedButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:cornerRadius="56dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>

Background Drawable:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/colorAccent" />
    <corners android:radius="56dp" />
</shape>

и соответствующий код расширения Java:

private void setExtended(boolean extended, boolean force) {
    if (isAnimating || (extended && isExtended() && !force)) return;

    ConstraintSet set = new ConstraintSet();
    set.clone(container.getContext(), extended ? R.layout.fab_extended : R.layout.fab_collapsed);

    TransitionManager.beginDelayedTransition(container, new AutoTransition()
            .addListener(listener).setDuration(150));

    if (extended) button.setText(currentText);
    else button.setText("");

    set.applyTo(container);
}
0 голосов
/ 22 июня 2018

Краткий ответ: установите фон в прямоугольник со скругленными углами, а не в овал.Затем установите размер радиуса, равный половине высоты кнопки.

Как я на самом деле это сделал:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/maps_main_distance_btn"
    android:layout_width="@dimen/floating_button_width"
    android:layout_height="@dimen/floating_button_height"
    android:layout_marginBottom="8dp"
    android:background="@drawable/btn_background_expanded"
    android:text="@string/str_distance_btn"
    app:elevation="0dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

drawable / btn_background_expanded.xml:

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="?android:colorControlHighlight">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="?android:colorAccent" />
            <corners
                android:radius="@dimen/floating_button_radius"
                />
        </shape>
    </item>
</ripple>
...