【问题标题】:How to create a Snackbar like in the material documentation?如何在材料文档中创建 Snackbar?
【发布时间】:2018-12-26 16:09:47
【问题描述】:

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

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

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

【问题讨论】:

    标签: android material-design material-components-android android-snackbar snackbar


    【解决方案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 只需要做三件事:

          1. 获取SnackBar的LayoutParams并设置边距
          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>
          

          【讨论】:

            【解决方案5】:

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

            你可以获取SnackBar的LayoutParams,并为其添加BottomSide边距

            试试下面的代码

            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 并将其设置为小吃店背景来做到这一点
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-10-09
            • 1970-01-01
            • 1970-01-01
            • 2017-07-08
            • 2017-11-14
            • 2017-12-07
            • 1970-01-01
            相关资源
            最近更新 更多