如何像 material 文档中那样创建 Snackbar?
How to create a Snackbar like in the material documentation?
我在 Android 应用程序的 Outlook 中看到了这个新的 Snackbar 样式,现在在 Material 文档中寻找它:
https://material.io/design/components/snackbars.html
有人知道如何创建这些 "offset Snackbars" 吗?
how to create those "offset Snackbars"?
你可以获取SnackBar的LayoutParams
并在其上添加Bottom和Sidemargin
试试下面的代码
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();
}
要构建像 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 中可绘制圆角的代码:
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#323232"/>
<corners android:radius="4dp"/>
</shape>
您需要使用新的 Material 主题。
在您的 build.gradle 导入
implementation 'com.google.android.material:material:1.2.0-alpha06'
将所有 Snackbar 导入更改为:
import com.google.android.material.snackbar.Snackbar
然后在您的 style.xml 文件中,您的父主题需要是 material 主题之一:
Theme.MaterialComponents.Light.DarkActionBar
Theme.MaterialComponents.DayNight.NoActionBar
我添加了 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>
而且有效!以编程方式修改 code/layout/background 对我不起作用
您可以只使用 Material 组件库中的默认值 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>
我在 Android 应用程序的 Outlook 中看到了这个新的 Snackbar 样式,现在在 Material 文档中寻找它:
https://material.io/design/components/snackbars.html
有人知道如何创建这些 "offset Snackbars" 吗?
how to create those "offset Snackbars"?
你可以获取SnackBar的LayoutParams
并在其上添加Bottom和Sidemargin
试试下面的代码
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();
}
要构建像 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 中可绘制圆角的代码:
<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#323232"/>
<corners android:radius="4dp"/>
</shape>
您需要使用新的 Material 主题。
在您的 build.gradle 导入
implementation 'com.google.android.material:material:1.2.0-alpha06'
将所有 Snackbar 导入更改为:
import com.google.android.material.snackbar.Snackbar
然后在您的 style.xml 文件中,您的父主题需要是 material 主题之一:
Theme.MaterialComponents.Light.DarkActionBar
Theme.MaterialComponents.DayNight.NoActionBar
我添加了 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>
而且有效!以编程方式修改 code/layout/background 对我不起作用
您可以只使用 Material 组件库中的默认值 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>