I'm not sure if this is a bug or somehow I'm not using the new Toolbar class properly.
I'm able to successfully theme the ActionBar directly using one of the available themes. This also allows me to theme the ActionMode. Everything works perfect as expected. Here is how I'm doing that.
<style name="Theme.ActionBar" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="actionModeBackground">@drawable/action_mode_background</item>
</style>
Now I'm looking for a little more flexibility so I'm trying to use the new Toolbar from the support library. Perfect the Toolbar implemented and working fine, however, now the action mode no longer working as expected. The custom background not working and the action mode bar is pushing the Toolbar down.
To fix the pushing down issue I used the flag windowActionModeOverlay
.
<style name="Theme.ActionBar" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="windowActionBar">false</item>
<item name="windowActionModeOverlay">true</item>
<item name="actionModeBackground">@drawable/action_mode_background</item>
</style>
In my Activity I do the following to make my Toolbar the default ActionBar.
Toolbar toolbar = (Toolbar) findViewById(R.id.toolBar);
setSupportActionBar(toolbar);
Right now I have tried so many things. I even tried diving into the source to figure out what is going on.
Any ideas why this is happening? How can I style the ActionMode? Or more specifically how can I change the background of the ActionMode?
Update 1
I noticed that when adding <item name="windowActionBar">false</item>
to my activity theme the action mode looses its theme versus having it as true. Obviously setting it as true it would include the window action bar.
Update 2
I was able to get the action mode themed properly using a couple mods.
The action mode background. Turns out you just set the background directly on the ActionMode theme as android:background! Also, the text you need to specify it on the theme.
<item name="actionModeStyle">@style/Widget.ActionMode</item>`
<style name="Widget.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
<item name="android:background">@drawable/action_mode_background</item>
<item name="titleTextStyle">@style/TitleTextStyle</item>
</style>
The back arrow not getting styled. I overwrote the drawable used and just added my own in white.
<item name="actionModeCloseDrawable">@drawable/ic_arrow_back_white_24dp</item>`
What is the difference between the toolbar and the action bar? The most obvious difference between the two is the updated visual design of the toolbar. The toolbar no longer includes an icon on the left side and decreases some of the spacing between the action items on the right side.
androidx.appcompat.widget.Toolbar. A standard toolbar for use within application content. A Toolbar is a generalization of action bars for use within application layouts.
In Android applications, Toolbar is a kind of ViewGroup that can be placed in the XML layouts of an activity. It was introduced by the Google Android team during the release of Android Lollipop(API 21). The Toolbar is basically the advanced successor of the ActionBar.
Toolbar was introduced in Android Lollipop, API 21 release and is the spiritual successor of the ActionBar.
Well, I was finally able to properly style the action mode after digging through some styles, themes, attrs, and code from the support library.
Before I provide the solution to my question I have to mention that there seems to be a bug with the support library. It seems to loose the set theme for the action mode when you hide the window action bar. I have reported a bug to see if they fix this or provide more details.
So the solution was to essentially style the background, text, and close icon my self. Doing this required using my own ActionMode style and changing an attribute pointer to the close icon.
themes.xml
<style name="Theme.Main.Home">
<item name="windowActionModeOverlay">true</item>
<item name="actionModeStyle">@style/Widget.ActionMode</item>
<item name="actionModeCloseDrawable">@drawable/ic_arrow_back_white_24dp</item>
</style>
styles.xml
<style name="Widget.ActionMode" parent="@style/Widget.AppCompat.ActionMode">
<item name="android:background">@drawable/action_mode_background</item>
<item name="titleTextStyle">@style/TitleTextStyle</item>
</style>
actionModeBackground
doesn't work for setting the background of the action mode. You must change the background via the standard android:background
on the ActionMode style.actionModeCloseDrawable
attr.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