web-dev-qa-db-fra.com

Barre d'action transparente: onglet personnalisé

Je souhaite créer un ActionBar avec des onglets transparents, avec #3b000000. Quelque chose comme ça, mais avec des onglets sous la barre d’action:

enter image description here

C'est le code que j'utilise dans styles.xml:

<style name="Theme.MyTheme" parent="@style/Theme.Sherlock.Light.DarkActionBar">
    <item name="Android:actionBarStyle">@style/ActionBar</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="Android:windowActionBarOverlay">true</item>
    <item name="actionBarStyle">@style/ActionBar</item>
</style>

<style name="ActionBar" parent="@style/Widget.Sherlock.Light.ActionBar">
    <item name="Android:background">@color/actionbar</item>
    <item name="background">@color/actionbar</item>
    <item name="Android:actionBarTabStyle">@style/ActionBarTabStyle</item>
    <item name="actionBarTabStyle">@style/ActionBarTabStyle</item>
</style>

<style name="ActionBarTabStyle" parent="@style/Widget.Sherlock.ActionBar.TabView">
    <item name="background">@color/actionbar_tabs</item>
    <item name="Android:background">@color/actionbar_tabs</item>
</style>

Ce qui se passe, c’est que le ActionBar lui-même montre affiche la couleur de fond transparente, mais les onglets sont totalement transparents (aucune couleur visible).

Comment puis-je résoudre ça?

62
nhaarman

Appelez setStackedBackgroundDrawable() sur votre ActionBar:

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
ActionBar actionBar = getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#330000ff")));
actionBar.setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#550000ff")));

Ceci produit (à titre d'exemple avec des icônes et des onglets aléatoires, et deux couleurs d'arrière-plan bleuâtres différentes pour mettre en évidence l'effet):

enter image description here

(L'icône d'actualisation est celle par défaut, accompagnée d'une légère transparence. Les autres icônes sont des icônes de test personnalisées de couleur #FFFFFFFF, c'est-à-dire sans transparence).

137
Gunnar Karlsson

J'ai fait ça sur un projet et le style était comme ça:

<style name="AppTheme" parent="Android:Theme.Holo">
    <item name="Android:windowActionBarOverlay">true</item>
    <item name="Android:actionBarStyle">@style/action_bar_theme</item>
    <item name="Android:actionMenuTextColor">#fff</item>
</style>

<style name="action_bar_theme" parent="@Android:style/Widget.Holo.ActionBar">
    <item name="Android:background">#b3000000</item>
    <item name="Android:titleTextStyle">@style/action_bar_text</item>
</style>
12
Marcio Covre

Comme mentionné dans cet article , l’utilisation du thème personnalisé suivant fonctionne parfaitement.

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@Android:style/Theme.Holo">
        <item name="Android:windowActionBarOverlay">true</item>
    </style>
</resources>

Pour appliquer une teinte de couleur, la réponse de Gunnar montre comment.

ActionBar actionBar = getActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#330000ff")));
actionBar.setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#550000ff")));
9
Shashwat Black

Voici mon code pour totalement transparent Actionbar

<!-- Base application theme. -->
<style name="TransparentTheme" parent="Android:Theme.Holo.Light">
    <!-- Customize your theme here. -->
    <item name="Android:windowBackground">@null</item>
    <item name="Android:actionBarStyle">@style/ActionBarStyle.Transparent</item>
    <item name="Android:windowActionBarOverlay">true</item>
</style>

<style name="ActionBarStyle.Transparent" parent="Android:Widget.ActionBar">
    <item name="Android:background">@null</item>
    <item name="Android:displayOptions">showHome|showTitle</item>
    <item name="Android:titleTextStyle">@style/ActionBarStyle.Transparent.TitleTextStyle</item>
</style>

<style name="ActionBarStyle.Transparent.TitleTextStyle" parent="@Android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="Android:textColor">@Android:color/white</item>
</style>

enter image description here

8
I Love Coding
             getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);//or add in style.xml
             ActionBar actionBar = getActionBar();

             ColorDrawable newColor = new ColorDrawable(getResources().getColor(R.color.action_bar_color));//your color from res
             newColor.setAlpha(128);//from 0(0%) to 256(100%)
             getActionBar().setBackgroundDrawable(newColor);

dans style.xml

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@Android:style/Theme.Holo">
        <item name="Android:windowActionBarOverlay">true</item>
    </style>
</resources>
4
NickUnuchek
ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));

Ça a bien marché pour moi

0
bong jae choe

Pour définir une barre d’action de thème transparente en tant qu’image ou couleur de fond, la meilleure façon de la mettre en œuvre est indiquée.

        actionBar.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(activity, Android.R.color.transparent)));


    ImageView image = new ImageView(this);
    image.setTag(R.string.decore_view);
    image.setAdjustViewBounds(true);
    image.setScaleType(ImageView.ScaleType.CENTER_CROP);
    image.setLayoutParams(new ViewGroup.LayoutParams(-1, -1));
    image.setImageResource(R.drawable.home_bg);
    ((ViewGroup)((ViewGroup)getWindow().getDecorView())).addView(image, 0);
0
vivek

Cela fonctionne bien dans mon cas pour rendre ActionBar transparent.

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#330000ff")));
getSupportActionBar().setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#550000ff")));
0
Aashish