I am working on using the newly added Toolbar that was introduced in Lollipop and the AppCompat-v7 library. I followed this guide on setting up the Toolbar I noticed that when you invoke something that will bring up the contextual ActionBar (such as highlighting text for copy/pasting), that it will push the Toolbar down on the page. You can see what I am talking about in the image at the bottom of the page:
So, essentially, I set it up like this. I have the Toolbar defined in an xml file that I use with include tags:
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorPrimary"/>
Then, I instantiate it in my view:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/root"
tools:context=".MainActivity">
<include
layout="@layout/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<!-- Rest of view -->
</LinearLayout>
In code, I set it up like so:
// On Create method of activity:
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
Does anyone know how to make it so that the Contextual ActionBar comes overtop of the Toolbar?
Jacob's solution worked for me but the contextual ActionBar was transparent and the Toolbar visible through it. This can be resolved as follows:
The theme "AppTheme.Base" must be the one applied to the Toolbar.
More details regarding contextual ActionBar styling:
how to Customize the Contextual Action Bar using appCompat in material design
Very useful method to bring toolbar to front
toolbar.bringToFront()
Just a small addition: For
to work it's important to callsuper.onCreate(savedInstanceState)
BEFORE callingsetContentView(R.layout.your_activity)
in your activity. It really makes a difference in this case!Another small addition: make sure to set at least an empty screen in the activity via
setContentView(R.layout.empty_screen)
if you load the whole ui in fragments (ft.replace(android.R.id.content, fragment)
).In my case,
<item name="windowActionModeOverlay">true</item>
did not work, but this work:<item name="android:windowActionModeOverlay">true</item>
,theandroid
is the key.Update:
Solution: use the windowActionModeOverlay property. Set this in your theme:
and the actionmode will be shown over the action bar instead of pushing it down. (If you're not using the latest AppCompat then you need to add the "android:" prefix to the property). It basically lets AppCompat know that you have a toolbar located in the top of the screen and that it should draw the ActionMode on top of it.
Old answer/workaround:
I ran into the same problem. No matter what theme I set, it always pushes down the Toolbar I set as ActionBar. I tried with and without the support library, but it didn't matter.
Unfortunately I was not able to fix it so I have built a workaround instead. In my
ActionModeCallback
'sonCreateActionMode
I hide the action bar:and in
onDestroyActionMode
I show it again:The hiding/showing happens so quickly it is not noticeable on my test devices. There is of course a downside: although the enter-animation still works, the exit-animation of the contextual action bar gets lost because the Toolbar immediately pops over it. But until we come across a better solution I guess we are stuck with this.
(My Activity is actually extending a custom
BaseActivity
class which has a method calledgetActionBarToolbar()
, taken from the Google I/O 2014 app source code, so I can easily get fetch the Toolbar:Too bad the I/O app does not use the contextual action bar.)