我需要帮助。如何在样式应用程序中更改snackbar中文本的设计?代码的变化对我不感兴趣。我找到了以下代码。但这对我不起作用。这是为什么?我的主题来自@ style / Theme.AppCompat.Light.DarkActionBar“。我将非常感谢你的帮助。
<style name="TextAppearance.Design.Snackbar.Message" parent="android:TextAppearance">
<item name="android:textSize">10sp</item>
<item name="android:textColor">#FEFEFE</item>
</style>
<style name="TextAppearance.Design.Snackbar.Action" parent="android:TextAppearance">
<item name="android:textSize">16sp</item>
<item name="android:textColor">#FEFEFE</item>
</style>
答案 0 :(得分:15)
你需要这个:tools:override="true"
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="TextAppearance.Design.Snackbar.Message" parent="android:TextAppearance" tools:override="true">
<item name="android:textColor">@color/text</item>
<item name="android:textSize">50sp</item>
</style>
</resources>
答案 1 :(得分:7)
通过Material Components Library,您可以全局更改应用主题中的快餐栏样式:
<style name="AppTheme" parent="Theme.MaterialComponents.*">
<!-- Style to use for Snackbars in this theme. -->
<item name="snackbarStyle">@style/Widget.MaterialComponents.Snackbar</item>
<!-- Style to use for action button within a Snackbar in this theme. -->
<item name="snackbarButtonStyle">@style/Widget.MaterialComponents.Button.TextButton.Snackbar</item>
<!-- Style to use for message text within a Snackbar in this theme. -->
<item name="snackbarTextViewStyle">@style/Widget.MaterialComponents.Snackbar.TextView</item>
....
</style>
注意:snackbarStyle
和snackbarButtonStyle
要求版本1.1.0,snackbarTextViewStyle
要求版本1.2.0。
例如:
<style name="snackbar_style" parent="@style/Widget.MaterialComponents.Snackbar">
<item name="android:layout_margin">32dp</item>
</style>
<style name="snackbar_button" parent="@style/Widget.MaterialComponents.Button">
<item name="backgroundTint">@color/secondaryLightColor</item>
<item name="android:textColor">@color/primaryDarkColor</item>
</style>
<style name="snackbar_text" parent="@style/Widget.MaterialComponents.Snackbar.TextView">
<item name="android:textColor">@color/secondaryLightColor</item>
</style>
答案 2 :(得分:4)
2018年新方法:
https://materialdoc.com/components/snackbars-and-toasts/#with-code
//创建实例
Snackbar snackbar = Snackbar.make(view, text, duration);
//设置操作按钮的颜色
snackbar.setActionTextColor(getResources().getColor(R.color.indigo));
//获得小吃店视图
View snackbarView = snackbar.getView();
//更改小吃栏文本颜色
int snackbarTextId = android.support.design.R.id.snackbar_text;
TextView textView = (TextView)snackbarView.findViewById(snackbarTextId);
textView.setTextColor(getResources().getColor(R.color.indigo));
//更改小吃栏背景
snackbarView.setBackgroundColor(Color.MAGENTA);
答案 3 :(得分:2)
感谢shadowsheep,我用Material Components
写了这些样式。我也删除了边距。您可以编译他的app来研究Snackbar
。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<!-- Snackbar -->
<item name="snackbarStyle">@style/MaterialSnackbarTheme</item>
<item name="snackbarButtonStyle">@style/MaterialSnackbarTextButtonTheme</item>
<item name="snackbarTextViewStyle">@style/MaterialSnackbarTextViewTheme</item>
</style>
<style name="MaterialSnackbarTheme" parent="@style/Widget.MaterialComponents.Snackbar">
<!-- <item name="backgroundTint">#00cc77</item>-->
<!-- <item name="android:background">@drawable/snackbar_background</item>-->
<item name="android:background">#00cc77</item>
<item name="cornerRadius">0dp</item>
<item name="android:layout_margin">0dp</item>
<item name="actionTextColorAlpha">1.0</item>
</style>
<style name="MaterialSnackbarTextButtonTheme" parent="@style/Widget.MaterialComponents.Button.TextButton.Snackbar">
<item name="backgroundTint">#7777ff</item>
<item name="android:textColor">#ffffff</item>
</style>
<style name="MaterialSnackbarTextViewTheme" parent="@style/Widget.MaterialComponents.Snackbar.TextView">
<item name="android:textColor">#ffffff</item>
<item name="android:alpha">1.0</item>
</style>
drawable / snackbar_background.xml在哪里:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle"
>
<solid android:color="#00cc77" />
</shape>
如果已添加,请不要忘记从Snackbar.make()
中删除
view.setBackgroundColor(ContextCompat.getColor(context, R.color.bg_color))
setActionTextColor(ContextCompat.getColor(context, R.color.button_color))
与AlertDialog
不同,Snackbar
在snackbarButtonStyle
内拥有snackbarTextViewStyle
和AppTheme
设置(这很奇怪,因为昨天它们在MaterialSnackbarTheme
内运行良好)。
正如@StayCool在评论中所说,Snackbar
当前对背景和文本颜色使用透明度(alpha = 0.5-0.6)。他们还增加了圆角和边距。要删除背景透明度,请使用<item name="actionTextColorAlpha">1.0</item>
或drawable / snackbar_background.xml。您可以看到他的variant。
答案 4 :(得分:0)
我深入研究了Snackbar的资源,这就是我发现的东西 Snackbar背景由2层组成:基础层和覆盖层,它们是混合颜色。
要指定这些颜色,只需添加到主题2参数:
colorSurface -背景色,默认= 0xFFFFFFFF
colorOnSurface -覆盖,默认= 0xFF000000
因此,在默认情况下,默认情况下应用0.8 alpha,我们得到的颜色是0xFF333333,介于白色和黑色之间。
混合和设置Snackbar的样式很有趣:)