Custom Translucent Android ActionBar

前端 未结 7 963
梦如初夏
梦如初夏 2020-11-29 16:19

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

相关标签:
7条回答
  • 2020-11-29 16:22

    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:

    getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
    
    //getWindow().requestFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY); << Use this for API 7+ (v7 support library) 
    

    Then after you call setContentView(..) (since setContentView(..) also initializes the actionbar next to setting the content) you can set a background drawable on your actionbar:

    getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar_bg));
    

    which can be a shape drawable with an alpha put in res/drawable:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> 
        <solid android:color="#BB000000" /> 
    </shape>
    

    You could also do this completely programatically by creating a ColorDrawable:

    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(128, 0, 0, 0)));
    

    Otherwise ofcourse you can hide the actionbar completely; in that case you can set a custom theme on your activity in your manifest:

    @android:style/Theme.NoTitleBar.Fullscreen
    

    or programmatically by calling

    getActionBar().hide();
    
    0 讨论(0)
  • 2020-11-29 16:26

    The above code is absolutely correct for making an action bar.

    Instead of

    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(128, 0, 0, 0)))
    

    use

    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    

    In this way, you will able to see the action bar fully transparent.

    0 讨论(0)
  • 2020-11-29 16:26

    Step I : Firstly, Set your theme at styles.xml

        <style name="AppTheme.NoActionBar">
            <item name="windowActionBar">false</item>
            <item name="windowNoTitle">true</item>
        </style>
    

    Step II : Second, you have to set theme to your activity at AndroidManifest.xml

        <activity android:name=".activity.YourActivity"
            android:theme="@style/AppTheme.NoActionBar"/>
    

    Step III : Now, In your activity layout file set like this:

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/agri_bg_login">
            <android.support.v7.widget.Toolbar
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/tool_bar"
                android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>
        </RelativeLayout>
    

    Finally, You can set it in your activity.

        Toolbar tool_bar = findViewById(R.id.tool_bar);
        setSupportActionbar(tool_bar);
        getSupportActionbar().setTitle("Your actionbar title");
        getSupportActionbar().setDisplayHomeAsUpEnabled(true);
    

    That's all, You'll get result with transparent Actionbar. Also, Here if you want to display drawer toggle button and menu, It'll show them.

    0 讨论(0)
  • 2020-11-29 16:37

    Here is how I got this to work:

    1) Request for actionbar overlay programmatically by calling

           getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
    

    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:

    getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00212121")) );
    

    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

    <item name="windowActionBarOverlay">true</item>
     <item name="android:actionBarStyle">@style/ActionBar.Transparent.Example</item>
     <item name="android:windowActionBarOverlay">true</item>
    
    0 讨论(0)
  • 2020-11-29 16:37

    I just like to share with you the steps I took to achieve this:

    1) At the OnCreate of your activity,

    getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
    

    then

    getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
                WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
    

    This is done before setContentView.

    2) After setContentView, you can do the following

     getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(0, 100, 181, 246)));
    

    Where the alpha value of 0 means it is fully transparent.

    0 讨论(0)
  • 2020-11-29 16:39

    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:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
        super.onCreate(savedInstanceState);
    }
    
    0 讨论(0)
提交回复
热议问题