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

Java 如何使用真正的浮动操作按钮(FAB)扩展?,java,android,floating-action-button,Java,Android,Floating Action Button,消除关于复制的任何疑问或想法:on定义为什么是“扩展” 但大多数人把“扩展”和“扩展”混淆了,这使得很难找到解决方案。像 问题 因此,我期待的是如何设置文本和扩展大小的晶圆厂 今天我的代码是这样的: <android.support.design.widget.FloatingActionButton android:id="@+id/maps_main_distance_btn" android:layout_width="0dp" android:layou

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

但大多数人把“扩展”和“扩展”混淆了,这使得很难找到解决方案。像

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

今天我的代码是这样的:

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


没有文本,也没有正确的格式。我在约束布局中使用它。

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

我是如何做到的:

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

您可以使用。(我用了另一种方式) 但我使用了一个按钮,在协调器布局中创建了一个圆形的很棒的按钮,如下所示:

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

结果是:

其中可以包含图标(请参阅)

使用
app:layout\u behavior=“@string/fab\u transformation\u sheet\u behavior”
它的行为类似于fab,如下所示:

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

祝你好运。

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

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

折叠的晶圆厂状态:

<?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>
  • 在Gradle文件中添加依赖项:
  • 在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" />
    
    
    

    在您链接的页面上显示,Android扩展晶圆厂尚未推出。也许可以尝试使用自定义视图来近似效果。@LeoAso但这只是一个示例,对吗?我得到的是,他们还没有做一个代码示例,但它已经存在了……我不这么认为。似乎页面链接到组件的实际实现,而不仅仅是示例。如果您检查标记为“代码可用”的链接,您将看到组件的文档。如果你点击安卓链接,你会看到它还没有实现。它刚刚作为计划工作添加到安卓材料组件库中,你可以看到Github中提出的问题-我现在尝试过,但没有成功。你能说你用的是什么硬币吗?如果你有结果的图片?谢谢,这不是一个解决办法。Android不会让你像这个家伙那样为FAB定义自定义背景。他可能认为它会像其他观点一样适用于FAB,但不是:)@FARID谢谢,我没有把这当作解决方案,我甚至说这对我来说不起作用me@CanatovI不是指你。我是说那个贴了这个答案的人我看到了,但是当一条snackBar信息出现时,这是什么行为?它向上移动?覆盖信息还是被覆盖?@Canato晶圆厂将像支持库中的晶圆厂一样向上移动我不明白的是,为什么你不简单地使用材料设计的延伸library@FARID如果你注意回答的日期,你可以看到还没有发射。给这个人一枚奖章!!别忘了把MaterialComponents作为主题,比如“theme.MaterialComponents.NoActionBar”太棒了!谢谢你!如果您的活动主题未继承“theme.MaterialComponents.NoActionBar”,则必须将android:theme=“@style/theme.MaterialComponents.NoActionBar”作为按钮的属性。否则,可能会出现布局充气例外情况。这似乎不适用于材质v
    1.1.0
    (无alpha)或更新版本(我尝试了v
    1.2.1
    )。为什么我需要
    1.1.0-alpha04
    才能工作?是否有任何地方我可以验证/检查是否有新的实现我可以使用,包括这一点?
    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);
    }
    
    implementation 'com.google.android.material:material:1.1.0-alpha04'
    
    <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" />