如何在材料文档中创建 Snackbar?
Posted
技术标签:
【中文标题】如何在材料文档中创建 Snackbar?【英文标题】:How to create a Snackbar like in the material documentation? 【发布时间】:2018-12-26 16:09:47 【问题描述】:我在 Outlook for android 应用程序中看到了这种新的 Snackbar 样式,现在在材料文档中寻找它:
https://material.io/design/components/snackbars.html
有人知道如何创建那些“偏移 Snackbars”吗?
【问题讨论】:
【参考方案1】:您可以只使用 Material Components Library 中的默认 Snackbar
:
如果您想更改Snackbar
的边距,您可以在您的应用主题中添加snackbarStyle
属性:
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight">
<item name="snackbarStyle">@style/MySnackbar</item>
</style>
与:
<style name="MySnackbar" parent="Widget.MaterialComponents.Snackbar">
<item name="android:layout_margin">32dp</item>
</style>
【讨论】:
【参考方案2】:我从https://material.io/develop/android/components/snackbars/添加了这些样式
<style name="Theme.App" parent="Theme.MaterialComponents.*">
...
<item name="snackbarStyle">@style/Widget.App.Snackbar</item>
<item name="snackbarButtonStyle">@style/Widget.App.SnackbarButton</item>
</style>
<style name="Widget.App.Snackbar" parent="Widget.MaterialComponents.Snackbar">
<item name="materialThemeOverlay">@style/ThemeOverlay.App.Snackbar</item>
<item name="actionTextColorAlpha">1</item>
</style>
<style name="Widget.App.SnackbarButton" parent="Widget.MaterialComponents.Button.TextButton.Snackbar">
<item name="android:textColor">@color/shrine_pink_100</item>
</style>
<style name="ThemeOverlay.App.Snackbar" parent="">
<item name="colorPrimary">@color/shrine_pink_100</item>
<item name="colorOnSurface">@color/shrine_pink_900</item>
</style>
它有效!以编程方式修改代码/布局/背景对我不起作用
【讨论】:
【参考方案3】:您需要使用新的 Material 主题。
在你的 build.gradle 中导入implementation 'com.google.android.material:material:1.2.0-alpha06'
将所有 Snackbar 导入更改为:
import com.google.android.material.snackbar.Snackbar
然后在您的 style.xml 文件中,您的父主题需要是材料主题之一:
Theme.MaterialComponents.Light.DarkActionBar
Theme.MaterialComponents.DayNight.NoActionBar
【讨论】:
【参考方案4】:构建一个像 Material 一样的圆形 SnackBar 只需要做三件事:
-
获取SnackBar的LayoutParams并设置边距
创建圆角形状
设置圆角形状作为 SnackBar 的背景
完整代码如下:
Snackbar.make(
findViewById(R.id.coordinator_layout),
"Your text here",
Snackbar.LENGTH_SHORT
).apply
view.layoutParams = (view.layoutParams as CoordinatorLayout.LayoutParams).apply
setMargins(
12,
12,
12,
12
)
view.background = resources.getDrawable(R.drawable.round_corner, null)
.show()
这里是drawable/round_corner中圆角drawable的代码:
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#323232"/>
<corners android:radius="4dp"/>
</shape>
【讨论】:
【参考方案5】:如何创建那些“偏移 Snackbars”?
你可以获取SnackBar的LayoutParams
,并为其添加Bottom和Side边距
试试下面的代码
public static void showSnackbar(Snackbar snackbar, int sideMargin, int marginBottom)
final View snackBarView = snackbar.getView();
// Depend upon your parent Layout Use `LayoutParams` of that Layout
final FrameLayout.LayoutParams params = (FrameLayout.LayoutParams) snackBarView.getLayoutParams();
params.setMargins(params.leftMargin + sideMargin,
params.topMargin,
params.rightMargin + sideMargin,
params.bottomMargin + marginBottom);
snackBarView.setLayoutParams(params);
snackbar.show();
【讨论】:
谢谢,你也知道我怎么做那些圆角吗? 您也许可以使用创建圆角shape
drawable 并将其设置为小吃店背景来做到这一点以上是关于如何在材料文档中创建 Snackbar?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 AngularJS 材料设计中创建简单的搜索输入文本?
在 Android 中,如何按照材料设计文档的规定创建一个概述的下拉菜单(微调器)? [关闭]