如何改变小吃店的背景颜色?

问题描述 投票:78回答:13

我在DialogFragment中显示snackbar在alertDialog的正面点击中。这是我的代码片段。

Snackbar snackbar = Snackbar.make(view, "Please enter customer name", Snackbar.LENGTH_LONG)
                .setAction("Action", null);
View sbView = snackbar.getView();
sbView.setBackgroundColor(Color.BLACK);
snackbar.show();

As u can see my snackbars background color showing white color

我正在将对话片段的视图传递给快餐栏。我想要背景颜色为黑色?我怎样才能做到这一点?我在DialogFragment中返回alertDialog。我正在设置对话框的主题如下

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">

    <!-- Used for the buttons -->
    <item name="colorAccent">@color/accent</item>
    <!-- Used for the title and text -->
    <item name="android:textColorPrimary">@color/primary</item>
    <!-- Used for the background -->
    <item name="android:background">@color/white</item>
</style>

虽然我将背景颜色设置为白色以进行对话,但是应该通过将背景颜色设置为快餐栏来覆盖它。

android material-design android-dialogfragment android-snackbar
13个回答
129
投票

尝试设置背景颜色如下:

sbView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.BLACK));

它将100%工作!


2
投票

把它放在一个Utility类中:

package com.yourapppackage.yourapp;

import android.support.design.widget.Snackbar;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class SnackbarUtils {

    private int BACKGROUND_COLOR;
    private int TEXT_COLOR;
    private int BUTTON_COLOR;
    private String TEXT;


    public SnackbarUtils(String aText, int aBgColor, int aTextColor, int aButtonColor){
        this.TEXT = aText;
        this.BACKGROUND_COLOR = aBgColor;
        this.TEXT_COLOR = aTextColor;
        this.BUTTON_COLOR = aButtonColor;
    }

    public Snackbar snackieBar(){
        Snackbar snackie = Snackbar.make(MainActivity.getInstance().findViewById(android.R.id.content), TEXT, Snackbar.LENGTH_LONG);
        View snackView = snackie.getView();
        TextView snackViewText = (TextView) snackView.findViewById(android.support.design.R.id.snackbar_text);
        Button snackViewButton = (Button) snackView.findViewById(android.support.design.R.id.snackbar_action);
        snackView.setBackgroundColor(BACKGROUND_COLOR);
        snackViewText.setTextColor(TEXT_COLOR);
        snackViewButton.setTextColor(BUTTON_COLOR);
        return snackie;
    }
}

使用这样:

new SnackbarUtils("This is the text displayed", Color.RED, Color.BLACK, Color.YELLOW).snackieBar().setAction("OTAY", v -> { 
     //donothing
     }).show();

1
投票

没有其他解决方案对我有用。如果我只设置Snackbar的背景颜色,TextView和Button下的布局是默认颜色。如果我设置TextView的背景,它会在显示SnackBar后略微闪烁。按钮周围的布局仍然是默认颜色。

最后我发现对我来说最好的方法是改变TextView父级的背景颜色(SnackbarContentLayout)。现在整个Snackbar都正确着色,当它出现时它不会闪烁。

public class Utility {
    public static void showSnackBar(Context context, View view, String text) {
        Snackbar sb = Snackbar.make(view, text, Snackbar.LENGTH_SHORT);
        sb.getView().setBackgroundColor(ContextCompat.getColor(context, R.color.colorAccent));
        sb.show();
    }
}

0
投票
Utility.showSnackBar(getApplicationContext(), findViewById(android.R.id.content), "Add success!!!");

}


0
投票

snack = Snackbar.make(view, text, duration) View view = snack.getView(); view.setBackgroundColor(BACKGROUND_COLOR); TextView tv = view.findViewById(android.support.design.R.id.snackbar_text); tv.setTextColor(TEXT_COLOR); ((SnackbarContentLayout) tv.getParent()).setBackgroundColor(BACKGROUND_COLOR); 的工作原理也一样。

public class CustomBar {

public static void show(View view, String message, boolean isLong) {
    Snackbar s = Snackbar.make(view, message, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT);
    s.getView().setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.red_900));
    s.show();
}

public static void show(View view, @StringRes int message, boolean isLong) {
    Snackbar s = Snackbar.make(view, message, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT);
    s.getView().setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.red_900));
    s.show();
}

73
投票

你可以这样做

Snackbar snackbar;
snackbar = Snackbar.make(view, "Message", Snackbar.LENGTH_SHORT);
View snackBarView = snackbar.getView();
snackBarView.setBackgroundColor(yourColor);
TextView textView = (TextView) snackBarView.findViewById(android.support.design.R.id.snackbar_text);
textView.setTextColor(textColor);
snackbar.show();

16
投票

如果要为所有Snackbars定义背景颜色,只需覆盖资源中某处的design_snackbar_background_color值。例如:

<color name="design_snackbar_background_color" tools:override="true">@color/colorPrimaryLight</color>

12
投票

Bellow代码对于更改消息的文本颜色很有用。

Snackbar snackbar = Snackbar.make(rootView, "Enter Your Message",Snackbar.LENGTH_SHORT);
View view = snackbar.getView();
TextView tv = (TextView)view.findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.RED);
snackbar.show();

第二种方式:您也可以通过改变活动主题来改变颜色。


9
投票

Kotlin版(带extension):

在文件中创建(例如Snackbar Extension.kt)扩展名:

fun Snackbar.withColor(@ColorInt colorInt: Int): Snackbar{
   this.view.setBackgroundColor(colorInt)
   return this
}

接下来,在您的Activity / Fragment中,您将能够执行此操作:

Snackbar
  .make(coordinatorLayout, message, Snackbar.LENGTH_LONG)
  .withColor(YOUR_COLOR)
  .show()

5
投票

现在为时已晚,万一有人仍然需要帮助。这是工作解决方案。

      Snackbar snackbar = Snackbar.make(mainView, text, Snackbar.LENGTH_LONG);
    View snackBarView = snackbar.getView();
    snackBarView.setBackgroundColor(context.getResources().getColor(R.color.btn_background_color));
    snackbar.show();

3
投票

在使用xamarin android时,我发现ContextCompat.GetColor()返回Int,但setBackgroundColor()需要一个Color类型的Parameter。所以这就是我如何在我的xamarin android项目中使用它。

Snackbar snackbarview =  Snackbar.Make(toolbar, message, Snackbar.LengthLong);
View snckView = snackbarview.View;                
snckView.SetBackgroundColor(Color.ParseColor(GetString(Resource.Color.colorPrimary)));
snackbarview.Show();

3
投票

由于没有其他答案提供自定义样式覆盖(我认为这是更安全的方式之一)我在这里发布我的解决方案。

我发布了一个解决方案,已经解决了新的AndroidXsupport design 28)主题。

如果您的应用程序在qazxsw poi中使用自定义主题calle qazxsw poi:

MyAppTheme

创建(如果您还没有)AndroidManifest.xml文件覆盖应用程序使用的主题:

<application
        android:name=".MyApplicationName"
        android:allowBackup="true"
        android:icon="@mipmap/icon"
        android:roundIcon="@mipmap/icon_round"
        android:label="@string/app_name"
        android:theme="@style/MyAppTheme">

并在您的values/style.xml文件中提供您的颜色

<style name="MyAppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/myColorPrimary</item>
    <item name="colorPrimaryDark">@color/myColorPrimaryDark</item>
    <item name="colorAccent">@color/myColorAccent</item>
    <item name="snackbarStyle">@style/MySnackBarStyle</item>
</style>

<!-- snackbar style -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
    <item name="android:background">@color/mySnackbarBackgroundColor</item>
</style>

2
投票

我做了一个小类工具,所以我可以轻松地通过应用程序制作自定义彩色零食。

values/colors.xml

然后使用它,像这样在应用程序中的任何位置:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="myColorPrimary">#008577</color>
    <color name="myColorPrimaryDark">#00574B</color>
    <color name="myColorAccent">#D81B60</color>
    <color name="mySnackbarBackgroundColor">#D81B60</color>
</resources>
© www.soinside.com 2019 - 2024. All rights reserved.