android - 如何将 FAB 塑造成圆角按钮(药丸形状),类似于联系人应用程序的联系人详细信息屏幕?

标签 android material-design floating-action-button material-components-android material-components

背景

最初,FAB( float 操作按钮)只有一种形状:圆形,并且只能选择在其中放置一个图标。

问题

在过去一年左右的时间里,谷歌在其应用程序中添加了各种屏幕,显示了一个改变其大小的 FAB。例如,如果您打开它的联系人应用程序并选择一个联系人,那么您就是这样的 FAB:

enter image description here

如果你稍微滚动一下,它就会变成一个圆圈,里面只有一个图标:

enter image description here

我想知道如何制作这样的 FAB,并使用类似的 FAB,中间只有一个图标(没有文字),也就是圆角。

类似的东西:

enter image description here

我的尝试和发现

起初,我试图将 FAB 的宽度设置得更大一些,但这并没有帮助,因为它坚持要成为一个完美的圆形(适合正方形,并且没有边缘)。

看到 FAB 目前可能无法处理这个问题,我改用了 MaterialCardView:

                <com.google.android.material.card.MaterialCardView

android:layout_width="60dp"android:layout_height="32dp" android:clickable="true"android:focusable="true" app:cardBackgroundColor="..."app:cardCornerRadius="16dp">

                    <androidx.appcompat.widget.AppCompatImageView
                        android:layout_width="wrap_content" android:layout_height="wrap_content"
                        android:layout_gravity="center" app:srcCompat="..."/>
                </com.google.android.material.card.MaterialCardView>

这有效,但点击效果消失了。

我也试过 MaterialButton,但这不支持中间的图标,只支持里面的各种文本。

后来,我注意到 FAB 确实有一种方法可以自定义自身的形状:

https://developer.android.com/reference/com/google/android/material/floatingactionbutton/FloatingActionButton#setshapeappearance

https://github.com/material-components/material-components-android/blob/master/lib/java/com/google/android/material/floatingactionbutton/FloatingActionButton.java

此外,关于不断扩大的 FAB,我发现了这一点:

https://developer.android.com/reference/com/google/android/material/floatingactionbutton/ExtendedFloatingActionButton

https://material.io/develop/android/components/extended-floating-action-button/

所以查看它的代码,我发现它使用了药丸的形状,我尝试做与普通 FAB 类似的事情:

class PillFab @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) :
    FloatingActionButton(context, attrs, defStyleAttr) {
    init {
        val shapeAppearanceModel =
            ShapeAppearanceModel(context, attrs, defStyleAttr, DEF_STYLE_RES, ShapeAppearanceModel.PILL)
        shapeAppearance = shapeAppearanceModel
    }

    companion object {
        private val DEF_STYLE_RES = R.style.Widget_MaterialComponents_FloatingActionButton
    }
}

遗憾的是,这根本不起作用。它仍然是一个圆形。

问题

如何设置一个圆角且里面只有一个图标的FAB(带点击效果)?

最佳答案

这不是完美的答案,因为您正在寻找没有文本的 ExtendedFAB。

但是您可以使用 MaterialButton 获得类似的东西使用属性 shapeAppearanceOverlay 更改组件的形状。

enter image description here

<com.google.android.material.button.MaterialButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MyApp.Button.Rounded"
            app:icon="@drawable/outline_cached_black_18dp"
            app:iconPadding="0dp"
            app:iconGravity="textStart"
            />

使用:

  <style name="ShapeAppearanceOverlay.MyApp.Button.Rounded" parent="">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">50%</item>
  </style>

当前 app:iconGravity 不支持 center 值。使图标居中的解决方法是使用这些属性:

            app:iconPadding="0dp"
            app:iconGravity="textStart"

如果您想覆盖默认样式的某些主题属性,现在可以使用新的 materialThemeOverlay 属性。

类似于:

<style name="MtButtonStyle"
 parent="Widget.MaterialComponents.Button">
   <item name=“materialThemeOverlay”>@style/MyButtonThemeOverlay</item>
</style>

<style name="MyButtonThemeOverlay">
  <item name="colorPrimary">@color/...</item>
  <item name="colorOnSurface">@color/....</item>
</style>

关于android - 如何将 FAB 塑造成圆角按钮(药丸形状),类似于联系人应用程序的联系人详细信息屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56929877/

相关文章:

javascript - Android-使用 addJavaScriptInterface 从 Javascript 返回一个值

android - 从后台返回带有MapViewLite的屏幕时使用Here Lite Maps崩溃

android - 限制发送可以向我的应用发送 ACTION_SEND Intent 的应用

javascript - Materializecss sidenav 不工作

javascript - MDCSnackbarFoundation 类使用

android - 如何更改扩展 float 操作按钮的形状?

css - 如何删除 Materialise Floating Action Button 动画?

android - Android Xamarin (VS 2012) 中的空引用异常

图像背景颜色匹配时,Android 工具栏菜单图标 "disappear"

android - 如何在运行时直接(无动画)设置 FAB 图标旋转和颜色以及 FAB 背景?