6

我在 Outlook for Android 应用程序中看到了这种新的 Snackbar 样式,现在在材料文档中寻找它:

https://material.io/design/components/snackbars.html

有人知道如何创建那些“偏移 Snackbars”吗?

4

5 回答 5

2

如何创建那些“偏移 Snackbars”?

您可以获取LayoutParamsSnackBar 并为其添加底部侧边距

试试下面的代码

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();
}
于 2018-07-18T16:46:34.967 回答
1

构建像 Material 一样的圆形 SnackBar 只需要做三件事:

  1. getLayoutParams 的 SnackBar 并设置边距
  2. 创建圆角形状
  3. 设置圆角形状作为 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>
于 2019-12-28T14:30:10.280 回答
1

我从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>

它有效!以编程方式修改代码/布局/背景对我不起作用

于 2020-07-09T16:54:07.073 回答
1

您需要使用新的 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

于 2020-05-22T09:52:39.547 回答
0

您可以只使用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>

在此处输入图像描述

于 2020-07-12T17:53:39.840 回答