L'application Google Maps dispose d'un ActionBar transparent, à travers lequel la carte est visible.
Je peux définir la transparence de l'ActionBar en utilisant ceci:
<style name="Theme.MyTheme" parent="Android:style/Theme.Holo.Light">
<item name="Android:actionBarStyle">@style/ActionBar</item>
</style>
<style name="ActionBar" parent="@Android:style/Widget.Holo.ActionBar">
<item name="Android:background">#64000000</item>
</style>
Mais comment puis-je afficher mon ImageView derrière l'ActionBar?
Vous pouvez activer le mode de superposition de ActionBar
. Pour ce faire, vous devez définir (Android:)windowActionBarOverlay
élément du thème à true
.
<style name="MyTheme" parent="Theme.Sherlock">
...
<item name="windowActionBarOverlay">true</item> <!-- for ActionBarSherlock -->
<item name="Android:windowActionBarOverlay">true</item>
</style>
Vous pouvez également le définir au moment de l'exécution:
requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);
Ce sera l'ActionBar une barre flottante semi-transparente.
Comme n'importe quel requestWindowFeature...
, cela doit être appelé avant d'ajouter du contenu.
Après le setContentView
, vous pouvez ensuite définir un arrière-plan à partir de votre Drawable
avec ceci:
getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar_bg));
Modifiez getActionBar
avec getSupportActionBar
pour ActionBarSherlock
actionbar_bg.xml
avec l'élément racine forme:
<solid Android:color="#64000000" />
Bien que je trouve la solution Tomik's excellente, cela sera utile pour ces cas ponctuels pour quelques activités plutôt que dans un style général.
Si quelqu'un a besoin de la barre transparente mais uniquement pour certaines activités tout en utilisant une barre solide dans les autres, il peut être utile de créer deux styles différents et d'utiliser le manifeste pour en prendre le contrôle:
<style name="MyThemeOverlay" parent="Theme.Sherlock">
...
<item name="windowActionBarOverlay">true</item> <!-- for ActionBarSherlock -->
<item name="Android:windowActionBarOverlay">true</item>
<!-- any stuff common here, colours, etc -->
<!-- define the style for native ActionBar for Android 4 and higher -->
<item name="Android:actionBarStyle">@style/myActionbarTransparent</item>
<!-- define the style for ActionBarSherlock -->
<item name="actionBarStyle">@style/myActionbarTransparent</item>
</style>
<style name="MyThemeNoOverlay" parent="MyTheme">
<item name="windowActionBarOverlay">false</item> <!-- for ActionBarSherlock -->
<item name="Android:windowActionBarOverlay">false</item>
<!-- any stuff specific for no overlay activity action bars -->
<!-- define the style for native ActionBar for Android 4 and higher -->
<item name="Android:actionBarStyle">@style/myActionbar</item>
<!-- define the style for ActionBarSherlock -->
<item name="actionBarStyle">@style/myActionbar</item>
</style>
<style name="myActionbar" parent="@Android:style/Widget.Holo.ActionBar">
<item name="Android:background">@color/white</item>
</style>
<style name="myActionbarTransparent" parent="@Android:style/Widget.Holo.ActionBar">
<item name="Android:background">@color/transparent</item>
</style>
puis dans votre AndroidManifest.xml
vous pouvez soit utiliser l'un d'eux par défaut et l'autre pour certaines activités spécifiques en faisant quelque chose comme:
<application
...
Android:theme="@style/MyThemeOverlay">
...
<activity
Android:name=".Activity1"
/>
<activity
Android:name=".Activity2"
Android:theme="@style/MyThemeNoOverlay"
/>
<activity
Android:name=".Activity3"
/>
<activity
Android:name=".Activity4"
Android:theme="@style/MyThemeNoOverlay"
/>
...
dans styles.xml:
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="colorPrimary">@color/semiTransparent5</item>
</style>
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" >
<item name="windowActionBarOverlay">true</item>
</style>
dans activity_main.xml:
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<com.google.Android.material.appbar.AppBarLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/AppTheme.AppBarOverlay">
<androidx.appcompat.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</com.google.Android.material.appbar.AppBarLayout>
<include layout="@layout/content_main" />