有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何使用真正的浮动操作按钮(FAB)扩展?

为了消除关于复制的任何疑问或想法:onMaterial Design定义为什么是“扩展”

FAB - Extended FAB

但大多数人将“扩展”与“Type of Transition: Speed Dial”混淆,这使得很难找到解决方案。像here

FAB - Type of Transition: Speed Dial

问题 因此,我期待的是如何设置文本和扩展大小的晶圆厂

今天我的代码是这样的:

<安卓.support.design.widget.FloatingActionButton
    安卓:id="@+id/maps_main_distance_btn"
    安卓:layout_width="0dp"
    安卓:layout_height="wrap_content"
    安卓:layout_marginBottom="8dp"
    安卓: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) 个答案

  1. # 1 楼答案

    你可以用this library来做这件事。(我用了另一种方式) 但我使用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"中,它的作用类似于fab,如下所示:

    enter image description here

    祝你好运

  2. # 2 楼答案

    enter image description here

    可以创建一个实用程序类,使用ConstraintLayoutMaterialButton动画化为扩展FloatingActionButton。首先需要用xml声明MaterialButton的两个状态,然后使用TransitionManager在它们之间设置动画

    你可以阅读一篇关于它的中篇文章here,同时,我会在这里添加一些相关的代码

    崩溃的晶圆厂状态:

    <?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>
    

    扩展晶圆厂状态:

    <?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>
    

    背景可绘制:

    <?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);
    }
    
  3. # 3 楼答案

    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" />
    
  4. # 4 楼答案

    简单的回答是:将背景设置为带圆角的矩形,而不是椭圆形。然后将半径的尺寸设置为按钮高度的一半

    我是如何做到的:

    <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" />
    

    可绘制/btn_背景_扩展。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>