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.
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.
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.
In XML, we can set a text color by the textColor attribute, like android:textColor="#FF0000" .
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.
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.
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. ...
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.
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));
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))
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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With