36 votes

Afficher ImageView partiellement derrière une barre d’action transparente

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

entrez la description de l'image ici

Je peux définir la transparence du 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 la barre d’action?

43voto

Tomik Points 10422

Vous pouvez activer le mode de superposition des ActionBar . Pour ce faire, vous devez définir les éléments (android:)windowActionBarOverlay du thème sur true .

 <style name="MyTheme" parent="Theme.Sherlock">
    ...
    <item name="windowActionBarOverlay">true</item> <!-- for ActionBarSherlock -->
    <item name="android:windowActionBarOverlay">true</item>
</style>
 

26voto

Siddharth Lele Points 12784

Vous pouvez aussi le mettre au moment de l'exécution:

requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

Ce sera l'ActionBar semi-transparent bar flottant.

Comme n'importe quel requestWindowFeature..., ce doit être appelée avant l'ajout de contenu.

Après l' setContentView, vous pouvez alors définir un arrière-plan de votre Drawable avec ce:

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

Variation getActionBar avec getSupportActionBar pour ActionBarSherlock

actionbar_bg.xml avec l'élément racine de la forme:

<solid android:color="#64000000" />

Bien que je trouve Tomik de la solution, cela sera utile pour les personnes d'un cas pour un certain nombre d'activités plutôt que d'un style.

10voto

Mariano Latorre Points 264

Si quelqu'un a besoin de la transparence de la barre, mais seulement pour certaines activités tout en utilisant une solide dans le reste d'entre eux, il pourrait être intéressant de créer deux styles différents et en utilisant le manifeste pour obtenir 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>

et puis dans votre AndroidManifest.xml vous pouvez soit utiliser l'un d'eux en tant que 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"
      />

...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X