在主题应用程序中的样式SnackBar

时间:2015-09-06 15:32:47

标签: android styles

我需要帮助。如何在样式应用程序中更改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>

5 个答案:

答案 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>

注意:snackbarStylesnackbarButtonStyle要求版本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>

enter image description here

答案 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不同,SnackbarsnackbarButtonStyle内拥有snackbarTextViewStyleAppTheme设置(这很奇怪,因为昨天它们在MaterialSnackbarTheme内运行良好)。

正如@StayCool在评论中所说,Snackbar当前对背景和文本颜色使用透明度(alpha = 0.5-0.6)。他们还增加了圆角和边距。要删除背景透明度,请使用<item name="actionTextColorAlpha">1.0</item>或drawable / snackbar_background.xml。您可以看到他的variant

enter image description here

答案 4 :(得分:0)

我深入研究了Snackbar的资源,这就是我发现的东西 Snackbar背景由2层组成:基础层和覆盖层,它们是混合颜色。

要指定这些颜色,只需添加到主题2参数:

colorSurface -背景色,默认= 0xFFFFFFFF

colorOnSurface -覆盖,默认= 0xFF000000

因此,在默认情况下,默认情况下应用0.8 alpha,我们得到的颜色是0xFF333333,介于白色和黑色之间。

混合和设置Snackbar的样式很有趣:)