Supprimer l'ombre sous la barre d'action


208

J'utilise actionbarsherlock. Le morceau de code ci-dessous est chargé de changer son arrière-plan en un arrière-plan personnalisé.

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.ActionBar">
    <item name="background">@drawable/actionbar_bg</item>
    <item name="android:background">@drawable/actionbar_bg</item>
    <...>  
</style>

<style name="Theme.MyApp" parent="@style/Theme.Sherlock.Light">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <..>
</style>

Et cela fonctionne pour actionbarsherlock (sur les versions ci-dessous en nid d'abeille). Mais dans ICS, j'ai une ombre sous la barre d'action que je ne veux pas. Quel est l'élément de style pour le faire disparaître?

Réponses:


481

Quel est l'élément de style pour le faire disparaître?

Pour supprimer l'ombre, ajoutez ceci à votre thème d'application:

<style name="MyAppTheme" parent="android:Theme.Holo.Light">
    <item name="android:windowContentOverlay">@null</item>
</style>

MISE À JOUR: Comme l'a indiqué @ Quinny898, sur Android 5.0, cela a changé, vous devez appeler setElevation(0)sur votre barre d'action. Notez que si vous utilisez la bibliothèque de support, vous devez l'appeler ainsi:

getSupportActionBar().setElevation(0);

N'est-ce pas un style de supprimer l'ombre sous la barre d'état, pas la barre d'action?
Michał K

96
Merci, il a disparu. Une chose importante à noter est que cette ligne de code doit apparaître dans le thème de l'application, pas dans le style de la barre d'action.
Michał K

3
Je travail! Ce qui doit être clair, c'est que cette ligne de code doit être ajoutée dans la balise de thème d'application, et non dans la balise de thème ActionBar.
tuoxie007

Et une autre chose qui doit également être notée est que vous devez changer votre thème dans les valeurs, values-v11, value-v14 (si vous utilisez la barre d'outils, ignorez cela)
TheOne_su

6
pour les appareils pré-sucette getSupportActionBar().setElevation(0);ne fonctionne pas. Vous avez donc mis <item name="android:windowContentOverlay">@null</item>votre thème d'application. J'ai eu le même problème. Maintenant, je les ai tous les deux. setElevation et ajout de l'élément windowContentOverlay dans le thème de l'application. setElevation fonctionne pour Android 5.0 et plus tandis que l'autre fonctionne pour pré-sucette. À votre santé!
Reaz Murshed

141

Pour Android 5.0, si vous souhaitez le définir directement dans un style, utilisez:

<item name="android:elevation">0dp</item>

et pour l'utilisation de la compatibilité de la bibliothèque de support:

<item name="elevation">0dp</item>

Exemple de style pour un thème lumineux AppCompat:

<style name="Theme.MyApp.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <!-- remove shadow below action bar -->
    <!-- <item name="android:elevation">0dp</item> -->
    <!-- Support library compatibility -->
    <item name="elevation">0dp</item>
</style>

Ensuite, appliquez ce style ActionBar personnalisé à votre thème d'application:

<style name="Theme.MyApp" parent="Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/Theme.MyApp.ActionBar</item>
</style>

Pour la version antérieure à Android 5.0, ajoutez-la également à votre thème d'application:

<!-- Remove shadow below action bar Android < 5.0 -->
<item name="android:windowContentOverlay">@null</item>

1
Ne fonctionnait pas pour moi pour les appareils pré 5.0. Le problème était que j'ai ajouté le windowContentOverlayau thème de la barre d'action, pas au thème de l'application.
Oliv

Je suis désolé, mais j'essaie de faire la chose opposée, faire apparaître l'ombre d'élévation sur les appareils pré-sucettes (j'ai réussi à le faire android:elevationpour les appareils Lollipop). Je n'arrive pas à le faire, en utilisant cette approche. Je pense que ce serait assez simple. Mettez une valeur non nulle pour les attributs d'élévation et c'est tout.
acrespo

Il devrait être visible par défaut si vous ne touchez pas à l'attribut android: windowContentOverlay, vérifiez peut-être que vous utilisez un thème correct ... Je pense que vous devez utiliser un thème AppCompat.
Sloosh

mais comment faire face à l' android:windowContentOverlayAPI pré lollipop? Je ne peux pas compiler si mon minSDK est pré-sucette mais la cible est 21?
Opiatefuchs

2
Cela a fonctionné , mais seulement quand je <style name="Theme.MyApp.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">sans style/en parentattribut.
Igor

103

Sur Android 5.0, cela a changé, vous devez appeler setElevation (0) sur votre barre d'action. Notez que si vous utilisez la bibliothèque de support, vous devez l'appeler ainsi:

getSupportActionBar().setElevation(0);

Il n'est pas affecté par l'élément de style windowContentOverlay, donc aucune modification des styles n'est requise


1
Devez-vous le faire pour chaque activité ou existe-t-il une méthode rapide pour l'appliquer à toutes les activités? Je vais ajouter toutes mes activités pour l'instant. Merci!
cnfw

Comme c'est comme n'importe quelle autre méthode de la barre d'action (par exemple le titre), je dirais que chaque activité
Kieron

C'est une honte. Ce serait bien de définir des paramètres comme celui-ci dans le fichier styles.xml. Peut-être que cela viendra dans une future mise à jour
cnfw

cela ne fonctionne pas sur les versions inférieures à 5.0. La barre d'action de support n'est-elle pas censée être compatible avec tous les appareils précédents?
splinter123

Identique à @ splinter123 ici :( Je me demande comment je peux supprimer les ombres sur pré-Lollipop lors de l'utilisation d'AppCompat.
FD_

55

ajouter app:elevation="0dp"dans AppBarLayout pour masquer l'ombre dans la barre d'applications


1
Regardez tout le monde, appliquez simplement cette solution et oubliez ce que tout le monde a dit. Merci mec! Ça marche! Solution très simple!
S bruce

1
Utilisez comme ceci: <android.support.design.widget.AppBarLayout android: layout_width = "match_parent" android: layout_height = "wrap_content" app: elevation = "0dp" android: theme = "@ style / AppTheme.AppBarOverlay">
Bharat Kul Ratan

@MarcoFerrari Utilisez ceci dans le cas de AppBarLayout comme 'getSupportActionBar (). SetElevation (0);' ne fonctionne pas.
Salil Dhawan

39

Si vous travaillez avec ActionBarSherlock

Dans votre thème, ajoutez ceci:

<style name="MyTheme" parent="Theme.Sherlock">
    ....
    <item name="windowContentOverlay">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    ....
</style>

c'est une meilleure réponse, elle spécifie l'élément de compatibilité
1owk3y

25

Vous devez définir app:elevation="0dp"dans le android.support.design.widget.AppBarLayoutpuis cela fonctionne.

<android.support.design.widget.AppBarLayout
    app:elevation="0dp"... >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@android:color/transparent"
        app:popupTheme="@style/AppTheme.PopupOverlay" >


    </android.support.v7.widget.Toolbar>

</android.support.design.widget.AppBarLayout>

1
cela provoque, que l'ombre de l'AppBar est partout - comment puis-je contrôler cela par programme?
Suisse

14
app:elevation="0dp" 

mais non

android:elevation="0dp"

travaillé pour moi sur android L


2

J'ai ce même problème et j'ai réussi à résoudre ce problème. Tout ce que vous avez à faire est simplement de changer l'élévation à 0 en virgule flottante dans l'activité dans laquelle vous souhaitez supprimer l'élévation.

Si vous voulez le changer dans une activité appelée MyActivity.java, vous devez donc obtenir leActionBar premier.

Importez d'abord la ActionBarclasse

import android.support.v7.app.ActionBar;

après l'importation, vous devez initialiser une variable de la barre d'action et définir son élévation à 0.

 private ActionBar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    .
    .
    toolbar=getSupportActionBar();
    toolbar.setElevation(0);
    .
    .
    }

1

Pour les développeurs Xamarin, veuillez utiliser: SupportActionBar.Elevation = 0;pour AppCompatActivityou ActionBar.Elevation = 0;pour les activités non compatibles


1

Solution pour Kotlin (Android 3.3, Kotlin 1.3.20)

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    supportActionBar!!.elevation = 0f
}

Je ne sais pas pourquoi cela est rejeté (je suis nouveau chez Kotlin) mais cela a fonctionné pour moi là où les autres ne l'ont pas fait
Allen Wixted

1

Essayez ceci, cela m'a aidé sans changer de thème. Mettez votre AppBarLayout dans n'importe quelle mise en page. J'espère que cela vous aidera

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="false"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">


    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:layout_height="?attr/actionBarSize"
       android:background="@color/white">
        <ImageView
            android:src="@drawable/go_grocery_logo"
            android:layout_width="108dp"
            android:layout_height="32dp" />
    </android.support.v7.widget.Toolbar>


</android.support.design.widget.AppBarLayout>
</RelativeLayout>

0

Pour ceux qui travaillent sur des fragments et il a disparu après la définition toolbar.getBackground().setAlpha(0);ou toute disparition, je pense que vous devez amener votre AppBarLayout au dernier du xml, donc son Fragment puis AppBarLayout puis relativelayout / constraint / linear quelle que soit l'utilisation que vous utilisez.


0

Ajoutez ceci toolbar.getBackground().setAlpha(0);à l'intérieur de la méthode OnCreate. Ajoutez ceci: android:elevation="0dp" android:background="@android:color/transparent à votre fichier xml de barre d'outils.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.