46

I want to change the action text color for my snackbar, but it is not working for some reason.

I use the following code to display a snackbar:

Snackbar.make(findViewById(R.id.root), "text", Snackbar.LENGTH_LONG).setActionTextColor(R.color.yellow).setAction("OK", new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    }
}).show();
qwertz
  • 6,206
  • 9
  • 40
  • 62

5 Answers5

92

The argument of setActionTextColor is the int that represents the color, not the resource ID.

Instead of this:

.setActionTextColor(R.color.yellow)

try:

.setActionTextColor(Color.YELLOW)

If you want to use resources anyway, try:

.setActionTextColor(ContextCompat.getColor(context, R.color.color_name));

Note: To use ContextCompat, I assume you have included Support library to your build.gradle file (It is optional if you have already appcompat (v7) library too).

Anand Singh
  • 5,672
  • 2
  • 23
  • 33
  • 3
    snackbar.setActionTextColor(getResources().getColor(R.color.colorPrimary)); Worked for me....! – Prasad May 22 '16 at 18:29
  • This only works if the the OP's "definition" of yellow is the same as the system. – tir38 Jan 06 '17 at 19:41
  • About the getColor being deprecated, don't use @SuppressWarning but instead ContextCompat.getColor(context, R.color.youColor) – Rafi Panoyan Feb 01 '18 at 16:20
  • You are assigning a color resource reference to the Snackbar (@ColorRes), but if you look at the method #setActionTextColor is requesting a @ColorInt Integer which basically asks a hexadecimal repesentation of a color directly. – Ricard Apr 05 '19 at 09:43
28

Use

.setActionTextColor(getResources().getColor(R.color.red))

instead of just

.setActionTextColor(R.color.red)
Adam Purser
  • 331
  • 2
  • 8
6

None of above answers helped me. I found this solution, and it works by changing manually the TextView's text color

Snackbar snack = Snackbar.make(v, "Snackbar message", Snackbar.LENGTH_LONG);
View view = snack.getView();
TextView tv = (TextView) view.findViewById(android.support.design.R.id.snackbar_text);
tv.setTextColor(Color.WHITE);
snack.show();
José Lozano Hernández
  • 1,813
  • 1
  • 17
  • 21
  • If anyone wants to use the same technique for changing the action button just add something like `TextView action = view.findViewById(android.support.design.R.id.snackbar_action); action.setTextColor(view.getContext().getResources().getColor(android.R.color.holo_red_dark));` – mtsahakis Aug 29 '18 at 12:17
1

If you want to change action button text color..

snackbar.setActionTextColor(getResources().getColor(R.color.colorAccent));

If you want to change action button background color..

View sbView = snackbar.getView();
Button button=
(Button) sbView.findViewById(com.google.android.material.R.id.snackbar_action);
button.setBackgroundColor(getResources().getColor(R.color.white));
0

Try this,

 Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), "Permission required!", 3000 /*Snackbar.LENGTH_INDEFINITE*/);
 snackbar.setAction("OK", new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            // perform any action when the button on the snackbar is clicked
            Toast.makeText(MainActivity.this, "Permission granted.", Toast.LENGTH_SHORT).show();
        }
    });
 snackbar.setBackgroundTint(getResources().getColor(R.color.black));      // set the background tint color for the snackbar
 snackbar.setActionTextColor(getResources().getColor(R.color.purple_500)); // set the action button text color
 snackbar.show();
HAZEEM JOONUS
  • 483
  • 6
  • 9