我在 Outlook for Android 应用程序中看到了这种新的 Snackbar 样式,现在在材料文档中寻找它:
https://material.io/design/components/snackbars.html
有人知道如何创建那些“偏移 Snackbars”吗?
我在 Outlook for Android 应用程序中看到了这种新的 Snackbar 样式,现在在材料文档中寻找它:
https://material.io/design/components/snackbars.html
有人知道如何创建那些“偏移 Snackbars”吗?
如何创建那些“偏移 Snackbars”?
您可以获取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();
}
构建像 Material 一样的圆形 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>
我从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>
它有效!以编程方式修改代码/布局/背景对我不起作用
您需要使用新的 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
您可以只使用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>