Как создать Snackbar, как в документации по материалам?

Я видел этот новый стиль Snackbar в приложении Outlook для Android и теперь искал его в документации по материалам:

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

Кто-нибудь знает, как создать эти «смещенные закуски»?


person the_dani    schedule 18.07.2018    source источник


Ответы (5)


как создать те «офсетные закуски»?

Вы можете получить LayoutParams SnackBar и добавить к нему нижнюю и боковую маржу.

Попробуйте, как код ниже

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();
}
person adityakamble49    schedule 18.07.2018
comment
Спасибо, ты тоже знаешь, как я могу сделать эти закругленные углы? - person the_dani; 18.07.2018
comment
Возможно, вы сможете сделать это, создав закругленный угол shape drawable и установив его в качестве фона для закусочной. - person adityakamble49; 18.07.2018

Вам нужно сделать всего три вещи, чтобы создать закругленную SnackBar, подобную Material:

  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:

  <shape android:shape="rectangle"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#323232"/>
    <corners android:radius="4dp"/>
</shape>
person Ahmad Jawid    schedule 28.12.2019

Вам нужно использовать новую тему «Материал». В вашем build.gradle import
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

person Roberto    schedule 22.05.2020

Я добавил эти стили из 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>

и это работает! Изменение кода / макета / фона программно не помогло мне

person Roger Alien    schedule 09.07.2020

Вы можете просто использовать значение по умолчанию 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>

введите описание изображения здесь

person Gabriele Mariotti    schedule 12.07.2020