web-dev-qa-db-fra.com

Afficher ImageView partiellement derrière ActionBar transparent

L'application Google Maps dispose d'un ActionBar transparent, à travers lequel la carte est visible.

enter image description here

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?

35
nhaarman

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>
43
Tomik

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.

26
Siddharth Lele

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"
      />

...

10
Mariano Latorre

enter image description here

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" />
1
Dan Alboteanu