and*_*per 5 android material-design floating-action-button material-components material-components-android
最初,FAB(浮动操作按钮)只有一个形状:圆形,并且它只能选择在其中包含一个图标。
在过去一年左右的时间里,谷歌在其应用程序中添加了各种屏幕,显示改变其大小的 FAB。例如,如果你打开它的通讯录应用程序并选择一个联系人,那么你就是一个 FAB:
如果你滚动一点,它就会变成一个圆圈,里面只有一个图标:
我想知道如何制作这样的 FAB,并使用类似的,中间只有一个图标(没有文字),意思是圆角。
类似的东西:
起初,我试图只是将 FAB 的宽度设置得更大,但这并没有帮助,因为它坚持是一个完美的圆形(适合正方形,并且没有边缘)。
看到可能 FAB 目前无法处理这个,我改用 MaterialCardView:
<com.google.android.material.card.MaterialCardView
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
这有效,但点击效果消失了。
我也试过 MaterialButton,但这不支持中间的图标,只支持里面的各种文字。
后来,我注意到 FAB 实际上确实有一种方法可以自定义自身的形状:
另外,对于不断扩大的 FAB,我发现了这一点:
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
}
}
Run Code Online (Sandbox Code Playgroud)
可悲的是,这根本不起作用。它仍然是圆形的。
如何设置带有圆角和单个图标的 FAB(具有点击效果)?
这不是完美的答案,因为您正在寻找没有文本的 ExtendedFAB。
\n但是,您可以通过MaterialButton使用属性更改 component\xe2\x80\x99s 形状来获得类似的内容shapeAppearanceOverlay。
<com.google.android.material.button.MaterialButton\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MyApp.Button.Rounded"\n app:icon="@drawable/outline_cached_black_18dp"\n app:iconPadding="0dp"\n app:iconGravity="textStart"\n />\nRun Code Online (Sandbox Code Playgroud)\n使用:
\n <style name="ShapeAppearanceOverlay.MyApp.Button.Rounded" parent="">\n <item name="cornerFamily">rounded</item>\n <item name="cornerSize">50%</item>\n </style>\nRun Code Online (Sandbox Code Playgroud)\n目前app:iconGravity不支持该center值。使图标居中的解决方法是使用以下属性:
app:iconPadding="0dp"\n app:iconGravity="textStart"\nRun Code Online (Sandbox Code Playgroud)\n如果您想覆盖默认样式的某些主题属性,现在可以使用新materialThemeOverlay属性。
就像是:
\n<style name="MtButtonStyle"\n parent="Widget.MaterialComponents.Button">\n <item name=\xe2\x80\x9cmaterialThemeOverlay\xe2\x80\x9d>@style/MyButtonThemeOverlay</item>\n</style>\n\n<style name="MyButtonThemeOverlay">\n <item name="colorPrimary">@color/...</item>\n <item name="colorOnSurface">@color/....</item>\n</style>\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1782 次 |
| 最近记录: |