Подтвердить что ты не робот

Как изменить цвет фона в закусочной?

Я показываю снэк-бар в DialogFragment в пределах положительного клика 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

Я передаю вид фрагмента диалога в закусочную. Я хочу черный цвет фона? Как я могу это сделать? Я возвращаю alertDialog в DialogFragment. И тема, которую я устанавливаю для диалога, как следует

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

Несмотря на то, что я устанавливаю цвет фона на белый для диалога, он должен быть переопределен, установив цвет фона на снэк-бар.

4b9b3361

Ответ 1

Попробуйте установить цвет фона следующим образом:

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

Он будет работать на 100%!

Ответ 2

вы можете сделать это, как это

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();

Ответ 3

Если вы хотите определить цвет фона для всех ваших панелей Snackbars, просто переопределите значение design_snackbar_background_color где-то в ваших ресурсах. Например:

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

Ответ 4

Код 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();

Второй способ: вы можете изменить цвет, изменив тему активности.

Ответ 5

Котлин версия (с расширением):

Создайте в файле (например, SnackbarExtension.kt) расширение:

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

Далее, в вашей Деятельности/Фрагменте вы сможете сделать это:

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

Ответ 6

Это слишком поздно, но если кому-то все еще нужна помощь. Вот рабочее решение.

      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();

Ответ 7

При работе с xamarin android я обнаружил, что ContextCompat.GetColor() возвращает Int, но setBackgroundColor() ожидает параметр типа Color. Итак, вот как я получил это работает в моем проекте xamarin android.

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

Ответ 8

Поскольку ни один из других ответов не предоставил переопределение собственного стиля (что я считаю одним из наиболее безопасных для обновления способов сделать это), я публикую здесь свое решение.

AndroidX решение, которое уже касается новой AndroidX (support design 28).

При условии, что ваше приложение использует пользовательский 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 файл 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>

и укажите ваши цвета в файле 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>

Ответ 9

Я сделал небольшой класс utils, поэтому я могу легко сделать пользовательские цветные закусочные через приложение.

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();

Ответ 10

Поместите его в класс Utility:

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();
    }
}

Используя следующее:

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

Ответ 11

Ни одно из других решений не помогло мне. Если я только установил цвет фона Snackbar, макет под TextView и Button был в цвете по умолчанию. Если я установил фон TextView, он немного мигнул после того, как был показан SnackBar. А раскладка вокруг кнопки все еще была в цвете по умолчанию.

В конце я узнал, что лучший способ для меня - это изменить цвет фона родителя TextView (SnackbarContentLayout). Теперь весь Snackbar окрашен должным образом, и он не мигает, когда появляется.

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);

Ответ 12

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();
}

}

Ответ 13

setBackgroundResource() работает так же хорошо.

Snackbar snackbar = Snackbar.make(view, text, Snackbar.LENGTH_LONG);
View sbView = snackbar.getView();
sbView.setBackgroundResource(R.color.background);
snackbar.show();

Ответ 14

В основном, предоставленные решения имеют один недостаток. Они меняют форму закусочной и убирают радиус.

Лично предпочитаю что-то подобное

val snackbar = Snackbar.make(view, text, Snackbar.LENGTH_LONG);
val view = snackbar.getView();
val color = view.resources.getColor(colorId)
view.background.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)