[android] كيفية تغيير لون خلفية شريط snackbar؟



3 Answers

يمكنك فعلها هكذا

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

أنا تظهر snackbar في 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();

مررت بملف الحوار إلى snackbar. أريد لون الخلفية أسود؟ كيف يمكنني أن أفعل هذا؟ أنا أرجع 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>

على الرغم من أنني أقوم بإعداد لون الخلفية إلى الأبيض للحوار ، يجب تجاوزه عن طريق تعيين لون الخلفية إلى snackbar.




أنا قدمت فئة utils قليلا حتى أتمكن بسهولة من جعل snackbars الملونة المخصصة من خلال التطبيق.

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



بعد فوات الأوان ولكن في حالة ما زال شخص ما بحاجة إلى مساعدة. هنا هو حل العمل.

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



إذا كنت تريد تحديد لون خلفية لجميع Snackbars ، فما عليك سوى تجاوز قيمة design_snackbar_background_color في مكان ما في مواردك. فمثلا:

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



Related