Android 安卓:用更大的图标创建更大的浮动动作按钮

Android 安卓:用更大的图标创建更大的浮动动作按钮,android,floating-action-button,Android,Floating Action Button,我想创建一个更大的浮动动作按钮(FAB),比通常的56 dp更大,里面有一个更大的图标。 (出于我的目的,图标永远不会是自解释的,因此我将创建一个包含短文本的png文件,并将此png用作图标。) 增加晶圆厂的规模效果很好: 由于我没有使用mini-FloatingActionButton,我重新定义了mini-button的大小。 在我的布局xml中,我指定: <android.support.design.widget.FloatingActionButton ... a

我想创建一个更大的浮动动作按钮(FAB),比通常的56 dp更大,里面有一个更大的图标。 (出于我的目的,图标永远不会是自解释的,因此我将创建一个包含短文本的png文件,并将此png用作图标。)

增加晶圆厂的规模效果很好:
由于我没有使用mini-FloatingActionButton,我重新定义了mini-button的大小。
在我的布局xml中,我指定:

<android.support.design.widget.FloatingActionButton
    ...
    app:fabSize="mini"
    ....

您可以尝试在
维度中重新定义晶圆厂图像大小的最大大小。xml

<resources xmlns:tools="http://schemas.android.com/tools">
    <dimen name="design_fab_size_mini" tools:override="true">80dp</dimen>
    <dimen name="design_fab_content_size" tools:override="true">48dp</dimen>
</resources>

80dp
48dp
必须确保覆盖设计库中的原始资源。如果不适合您,请尝试使用
design\u fab\u image\u size
而不是
design\u fab\u content\u size


小心使用,因为这是一个黑客而不是实际的解决方案。如果在将来的设计库版本中更改了资源的名称,则解决方案可能无法工作。我的意见是坚持设计库中定义的尺寸,因为它是基于材料设计的推荐设计指南,使您的整个应用程序看起来很好。

我偶然发现了这一点,然后通过尝试和错误找到了答案。如果同时将
layout:width
layout:height
设置为
match\u parent
,并将浮动操作按钮包装在FrameLayout中(不必如此,但有意义,因为您只想设置按钮的大小)

然后将FrameLayout的宽度和高度设置为所需的任意值

我对Grace Coder的答案投了赞成票,因为它确实解决了这个问题,但我认为这种方法更安全,可能更可取

<FrameLayout
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_below="@+id/chronometer"
    android:layout_centerHorizontal="true">

    <android.support.design.widget.FloatingActionButton
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/chronometer"
        android:layout_centerHorizontal="true"
        android:layout_gravity="bottom"
        android:clickable="true"
        android:src="@android:drawable/ic_btn_speak_now"
        android:id="@+id/record_fab" />
</FrameLayout>


顶部晶圆厂使用我的代码/变通方法,而底部晶圆厂使用标准(大部分是不可更改的)尺寸。

只是对@GraceCoder的答案进行了澄清,@Tim Castelijns在上面的评论中指出了这一点

您应该转到res->values->dimensions.xml文件

并将其更改为添加

<dimen name="design_fab_size" tools:override="true">100dp</dimen>
    <dimen name="design_fab_content_size" tools:override="true">98dp</dimen>
100dp
98dp
注意: 是的

设计制作尺寸

不是

设计制作尺寸迷你型

120dp
150dp

在Android p预览版中,让晶圆厂与其父晶圆厂的尺寸相匹配对我来说已经不起作用了,因为图标的尺寸不再缩放,使其太小,偏离中心

我找到的最简单的替代方法是将晶圆厂放置在框架布局中,在晶圆厂上设置一个合理的边距,这样阴影就不会被切断(我使用了10dp),将两者的大小设置为
wrap\u content
,然后将
scaleX
scaleY
添加到框架布局中

<FrameLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:scaleX="1.6"
    android:scaleY="1.6">

    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:clickable="true"
        android:focusable="true"
        android:src="@drawable/ic_send_white_24dp" />
</FrameLayout>


这与预期一样有效,允许按特定数量轻松缩放,并且不会影响任何其他浮动操作按钮。

由于Design Support Library 27.1.0,因此有一种官方方法可以设置自定义晶圆厂尺寸:和相应的尺寸。要增加图标大小,您可以使用android:scaleType=“center”
和更大的可绘制图标更新:
android:scaleType
现在可用
fab.setScaleType(ImageView.scaleType.CENTER)

其他建议的解决方案也有一些缺点:

  • 不能应用于单个按钮,本质上是一种黑客行为(使用非公共API,可能会发生更改)
  • (或者只是将FAB的
    layout\u width
    layout\u height
    设置为所需的大小,这具有相同的效果)在棒棒糖制作前的设备上看起来非常棒更新:现在也开始发布棒棒糖(见下面的屏幕截图)
  • 需要调整边距(因为视觉晶圆厂大小现在与其布局大小不匹配)并缩放不可缩放的部分:按钮边框和(棒棒糖前)阴影宽度
如API 19(左)和API 21(右)所示:


现在您可以轻松定制晶圆厂尺寸,只需添加

        app:fabCustomSize="32dp"


用于更改晶圆厂尺寸用途

app:fabCustomSize="70dp"
和图标大小

app:maxImageSize="50dp"
范例

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/button_start"
            style="@style/Widget.MaterialComponents.FloatingActionButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:backgroundTint="@android:color/holo_blue_bright"
            app:fabCustomSize="70dp"
            app:layout_anchor="@id/bottom_app_bar"
            app:rippleColor="@android:color/holo_blue_dark"
            app:srcCompat="@drawable/ic_play"
            app:layout_anchorGravity="center|top"
            android:focusable="true"
            app:maxImageSize="40dp"
            app:tint="@color/white_overlay_1"
            />

要调整晶圆厂内图标的大小:

app:maxImageSize="100dp"
整个例子:

<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:layout_marginEnd="25dp"
    android:layout_marginBottom="25dp"
    android:src="@drawable/ic_add"
    app:fabCustomSize="100dp"
    app:maxImageSize="75dp" />


谢谢Grace Coder。对我来说,如果我写的是“fab_size_mini”而不是“design_fab_size_mini”和“fab_content_size”而不是“design_fab_content_size”,那就完美了。回答得很好。fab_size_mini和fab_size_normal Works超级答案@Grace Coder如果有人想知道,你可以在这里找到dimen的名字:,看起来它确实是
design\u fab\u image\u size
在我的情况下工作得很好,因为我必须为单个设备定制更好的解决方案,如果有多个fab按钮,只需增加一个大小。当你使fab比正常尺寸大时,它就工作了,但是,如果将晶圆厂缩小,则不会调整晶圆厂内图标的大小。此解决方案会在棒棒糖生产前的设备上产生视觉瑕疵,请参阅以了解详细信息。对于自定义尺寸,请参阅自定义图像-可以设置
scaleX
scaleY
-目前,在2020年,这是最可接受和完整的答案。谢谢不知道这怎么会不被接受,这很好,谢谢!您能告诉我如何以编程方式设置maxImageSize吗?我找不到答案。
        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:id="@+id/button_start"
            style="@style/Widget.MaterialComponents.FloatingActionButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:backgroundTint="@android:color/holo_blue_bright"
            app:fabCustomSize="70dp"
            app:layout_anchor="@id/bottom_app_bar"
            app:rippleColor="@android:color/holo_blue_dark"
            app:srcCompat="@drawable/ic_play"
            app:layout_anchorGravity="center|top"
            android:focusable="true"
            app:maxImageSize="40dp"
            app:tint="@color/white_overlay_1"
            />
app:maxImageSize="100dp"
<com.google.android.material.floatingactionbutton.FloatingActionButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    android:layout_marginEnd="25dp"
    android:layout_marginBottom="25dp"
    android:src="@drawable/ic_add"
    app:fabCustomSize="100dp"
    app:maxImageSize="75dp" />