【问题标题】:Change action color of snackbar from style从样式更改小吃店的动作颜色
【发布时间】:2018-08-28 22:50:30
【问题描述】:

我需要AppTheme.colorAccent 为棕色,但我需要我的Snackbar 操作颜色为蓝色。如何在不改变AppTheme.colorAccent的情况下改变Snackbar的动作按钮颜色?

我已经尝试过这段代码,但它不起作用:

<style name="TextAppearance.Design.Snackbar" parent="android:TextAppearance" tools:override="true">
    <item name="colorAccent">#3097ff</item>
</style>

【问题讨论】:

  • 你不能从风格上做到这一点。动作Button直接引用colorAccent,并没有自己的自定义样式。

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


【解决方案1】:

您使用下面的代码为小吃店设置背景颜色和操作文本颜色..

 btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar snackbar = Snackbar.make(
                    view,
                    "Snackbar: floatingActionButton1 (normal) clicked",
                    Snackbar.LENGTH_LONG);
            snackbar.setActionTextColor(Color.RED);
            View snackbarView = snackbar.getView();
            snackbarView.setBackgroundColor(Color.WHITE);
            TextView textView = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);
            textView.setTextColor(Color.BLUE);

            snackbar.setAction("OK", new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(
                            getApplicationContext(),
                            "snackbar OK clicked",
                            Toast.LENGTH_LONG).show();
                }
            });

            snackbar.show();
        }
    });

【讨论】:

  • 标题为“从样式更改小吃店的动作颜色”
【解决方案2】:

您可以在colors.xml 中定义颜色并在snackbar 中使用它,如下所示:

val mySnackbar = Snackbar.make(findViewById(R.id.container),"Item added to cart.", Snackbar.LENGTH_SHORT)
mySnackbar.setAction("view cart", View.OnClickListener {/*action to be triggered*/  })
mySnackbar.setActionTextColor(/*color defined*/)
mySnackbar.show()

我在 Kotlin 中实现了这个。

【讨论】:

    【解决方案3】:

    使用材料组件库,您可以做到。

    只需在您的主题应用中添加 snackbarButtonStyle 属性即可。

    <style name="AppTheme" parent="Theme.MaterialComponents.*">
        <!-- Style to use for action button within a Snackbar in this theme. -->
        <item name="snackbarButtonStyle">@style/snackbar_button</item>
        ...
    </style>
    

    然后定义您的自定义样式:

      <style name="snackbar_button" parent="@style/Widget.MaterialComponents.Button.TextButton.Snackbar">
          <item name="backgroundTint">@color/secondaryLightColor</item>
          <item name="android:textColor">@color/primaryDarkColor</item>
      </style>
    

    它需要库的 1.1.0 版本。

    【讨论】:

      猜你喜欢
      • 2016-03-05
      • 2022-11-06
      • 2021-12-12
      • 2020-07-05
      • 2019-05-23
      • 2017-04-07
      • 2022-07-07
      • 2021-08-14
      • 2020-04-06
      相关资源
      最近更新 更多