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:
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?
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):
(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).
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>
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")));
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>
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>
ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
Ça a bien marché pour moi
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);
Cela fonctionne bien dans mon cas pour rendre ActionBar
transparent.
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#330000ff")));
getSupportActionBar().setStackedBackgroundDrawable(new ColorDrawable(Color.parseColor("#550000ff")));