I've been scouring the interwebs (e.g. Android documentation, answers here, etc.) for the answer to what I thought would be a fairly trivial question. How do you achieve a translucent action bar like the ones in Google Music and YouTube (links are image examples)?
I want video content to be full screen and not constrained/pushed down by the action bar while still leveraging the benefits of a built in UI component. I can obviously use a completely custom view, but I'd rather leverage the ActionBar if possible.
Manifest
<activity
android:name="videoplayer"
android:theme="@android:style/Theme.Holo"
android:launchMode="singleTop"
android:configChanges="keyboardHidden|orientation"/>
Activity
// Setup action bar
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
View customActionBarView = getLayoutInflater().inflate(R.layout.player_custom_action_bar, null);
actionBar.setCustomView(customActionBarView,
new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT,
R.dimen.action_bar_height));
actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
Menu
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/button1"
android:icon="@drawable/button1"
android:showAsAction="always"/>
<item
android:id="@+id/button2"
android:icon="@drawable/button2"
android:showAsAction="always"/>
</menu>
Custom ActionBar View
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_action_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:background="@color/TranslucentBlack">
<!--Home icon with arrow-->
<ImageView
android:id="@+id/home"
android:src="@drawable/home"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>
<!--Another image-->
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:visibility="visible"/>
<!--Text if no image-->
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:visibility="gone"/>
<!--Title-->
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingLeft="20dp"
android:gravity="center_vertical"/>
</LinearLayout>
If you want your activity to be fullscreen but still show an actionbar, but with an alpha you have to request overlaymode for the actionbar in
onCreate()
of your activity:Then after you call
setContentView(..)
(sincesetContentView(..)
also initializes the actionbar next to setting the content) you can set a background drawable on your actionbar:which can be a shape drawable with an alpha put in res/drawable:
You could also do this completely programatically by creating a
ColorDrawable
:Otherwise ofcourse you can hide the actionbar completely; in that case you can set a custom theme on your activity in your manifest:
or programmatically by calling
The above code is absolutely correct for making an action bar.
Instead of
use
In this way, you will able to see the action bar fully transparent.
Here is how I got this to work:
1) Request for actionbar overlay programmatically by calling
this 'requestFeature()' must be requested from your activity 'onCreate()' method before calling for 'setContentView(R.layout.my_layout)':
2) set the actionbar color by calling
setBackgroundDrawable()
like so:this method requires either a reference to a drawable or you can also use a color parser to parse a hex color value (first 2 digits are used for alpha channel starting at #00 to #FF)
Note that I am using actionBarSherlok
getSupportActionBar()
but this should work with any action bar.If you still cant get this to work, try adding this to your theme style
In addition to the correct answer, if you are using AppcomatActivity, call supportRequestWindowFeature instead of
Old Version:
getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
You want to use:
I think you should be able to do this using the Window flag
FEATURE_ACTION_BAR_OVERLAY
.Before you call
setContentView()
in your activity,Call:
And it will use an overlaid
ActionBar
instead of pushing down your window.I just like to share with you the steps I took to achieve this:
1) At the OnCreate of your activity,
then
This is done before setContentView.
2) After setContentView, you can do the following
Where the alpha value of 0 means it is fully transparent.