Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set support library snackbar text color to something other than android:textColor?

So I've started using the new Snackbar in the Design Support Library, but I found that when you define "android:textColor" in your theme, it applies to the text color of the snackbar. This is obviously a problem if your primary text color is dark.

enter image description here

Does anyone know a way around this or have advice for how I should color my text?

EDIT January 2017: (Post-Answer)

While there are some custom solutions to fix the problem below, it's probably good to provide the correct way to theme Snackbars.

Firstly, you probably shouldn't be defining android:textColor in your themes at all (unless you really know the scope of what is using the theme). This sets the text color of basically every view that connects to your theme. If you want to define text colors in your views that are not default, then use android:primaryTextColor and reference that attribute in your custom views.

However, for applying themes to Snackbar, please reference this quality guide from a third party material doc: http://www.materialdoc.com/snackbar/ (Follow the programmatic theme implementation to have it not rely on an xml style)

For reference:

// create instance Snackbar snackbar = Snackbar.make(view, text, duration);  // set action button color snackbar.setActionTextColor(getResources().getColor(R.color.indigo));  // get snackbar view View snackbarView = snackbar.getView();  // change snackbar text color int snackbarTextId = android.support.design.R.id.snackbar_text;   TextView textView = (TextView)snackbarView.findViewById(snackbarTextId);   textView.setTextColor(getResources().getColor(R.color.indigo));  // change snackbar background snackbarView.setBackgroundColor(Color.MAGENTA);   

(You can also create your own custom Snackbar layouts too, see the above link. Do so if this method feels too hacky and you want a surely reliable way to have your custom Snackbar last through possible support library updates).

And alternatively, see answers below for similar and perhaps faster answers to solve your problem.

like image 611
Mahonster Avatar asked Jun 25 '15 21:06

Mahonster


People also ask

How do I change the color of my font on snackbar?

If you want to define text colors in your views that are not default, then use android:primaryTextColor and reference that attribute in your custom views. For reference: // create instance Snackbar snackbar = Snackbar. make(view, text, duration); // set action button color snackbar.

What property is used for text color in Android?

In XML, we can set a text color by the textColor attribute, like android:textColor="#FF0000" .

How do we change a color of a text in Android Studio?

TextView Text Color – To change the color of text in TextView, you can set the color in layout XML file using textColor attribute or change the color dynamically in Kotlin file using setTextColor() method.

How to change text text and background color of the snackbar?

In our example, we will make the Snackbar look like this. To change text, action button, and background color of the Snackbar we are going to use of setTextColor (), setActionTextColor () ,and setBackgroundColor () methods.

How to implement snackbar in Android Studio?

Introduction 1 Creating a New Project with Android Studio. Open Android Studio and select Create a new project. ... 2 Setting up the Firebase Library. In this part, we will see how to set up the library for the project. ... 3 Implementation of Snackbar in Android. Snackbar with custom text color for message and action. ...

How to display a message in a snackbar?

Make a Snackbar to display a message. Snackbar will try and find a parent view to hold Snackbar's view from the value given to view. Snackbar will walk up the view tree trying to find a suitable parent, which is defined as a CoordinatorLayout or the window decor's content view, whichever comes first.

How to change the color of the action button text?

If you want to change action button text color.. 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));


2 Answers

I found this at What are the new features of Android Design Support Library and how to use its Snackbar?

This worked for me for changing the text color in a Snackbar.

Snackbar snack = Snackbar.make(view, R.string.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(); 



UPDATE: ANDROIDX: As dblackker points out in the comments, with the new AndroidX support library, code to find the ID of Snackbar TextView changes to:

TextView tv = view.findViewById(com.google.android.material.R.id.snackbar_text); tv.setTextColor(ContextCompat.getColor(requireContext(), R.color.someColor)) 
like image 147
Jarod Young Avatar answered Sep 20 '22 21:09

Jarod Young


I know this has been answered already but the easiest way I found was directly in the make using the Html.fromHtml method and a font tag

Snackbar.make(view,         Html.fromHtml("<font color=\"#ffffff\">Tap to open</font>").show() 
like image 31
JPM Avatar answered Sep 21 '22 21:09

JPM