web-dev-qa-db-fra.com

supprimer l'ombre sous le widget AppBarLayout android

Lorsque vous utilisez le widget AppBarLayout dans la bibliothèque de support de conception, une ombre apparaît au bas de la barre d'outils. Comment puis-je enlever cette ombre?

64
Abdul Rehman

Utilisez simplement app:elevation="0dp" pour supprimer l'ombre. Cela a toujours fonctionné pour moi. J'espère que ça marche pour toi.

170
danialzahid94

ce problème se produit lorsque version de l'API> = 21, si vous ne souhaitez pas modifier l'élévation, vous pouvez utiliser:

appBar.setOutlineProvider(null);

n'oubliez pas de vérifier la version de l'api


MODIFIER :

Blow est le code source de setOutlineProvider

   /**
     * Sets the {@link ViewOutlineProvider} of the view, which generates the Outline that defines
     * the shape of the shadow it casts, and enables outline clipping.
     * <p>
     * The default ViewOutlineProvider, {@link ViewOutlineProvider#BACKGROUND}, queries the Outline
     * from the View's background drawable, via {@link Drawable#getOutline(Outline)}. Changing the
     * outline provider with this method allows this behavior to be overridden.
     * <p>
     * If the ViewOutlineProvider is null, if querying it for an outline returns false,
     * or if the produced Outline is {@link Outline#isEmpty()}, shadows will not be cast.
     * <p>
     * Only outlines that return true from {@link Outline#canClip()} may be used for clipping.
     *
     * @see #setClipToOutline(boolean)
     * @see #getClipToOutline()
     * @see #getOutlineProvider()
     */
    public void setOutlineProvider(ViewOutlineProvider provider) {
        mOutlineProvider = provider;
        invalidateOutline();
    }

On dit que If the ViewOutlineProvider is null, if querying it for an outline returns false, or if the produced Outline is {@link Outline#isEmpty()}, shadows will not be cast.

Donc, si vous voulez supprimer l'ombre, vous feriez mieux d'utiliser cette méthode au lieu de définir app:elevation. Il semble que modifier l'élévation pour supprimer les ombres soit une sorte d'effet secondaire. Et changer l'altitude peut causer d'autres problèmes dans certains cas.

32
Liu Teng

Avec les dernières versions d’appcompat, le paramètre astuce app:elevation="0.1dp" in xml ne fonctionne plus.

Jusqu'à présent, j'ai trouvé deux solutions.

  1. Au lieu de définir app:elevation, essayez d’utiliser un stateListAnimator. Par exemple, dans le code:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
        StateListAnimator stateListAnimator = new StateListAnimator();
        stateListAnimator.addState(new int[0], ObjectAnimator.ofFloat(appBarLayout, "elevation", 0.1f));
        appBarLayout.setStateListAnimator(stateListAnimator);
    }
    
  2. Un moyen plus simple est de toujours définir app:elevation="0dp" dans XML comme d'habitude, mais dans le code suivant:

    appBarLayout.bringToFront();
    

Le mérite en revient à ces deux discussions:

La barre d'outils disparaît lors du réglage de l'élévation pour AppBarLayout

Lorsque set app: elevation = "0dp", alors hamburgermenu ne s'affiche pas dans la barre d'outils

8
gaolei

Pour tous ceux qui ne veulent pas utiliser bringToFront() et elevation="0dp", la barre d’outils disparaît:

app:elevation="0dp" combiné avec Android:translationZ="0.1dp" a fonctionné pour moi.

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:theme="@style/AppTheme.AppBarOverlay"
    app:elevation="0dp"
    Android:translationZ="0.1dp"
    >

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

</Android.support.design.widget.AppBarLayout>
6
fupduck

J'ai essayé app:elevation="0dp" mais la barre d'outils disparaît, mais en utilisant app:elevation="0.1dp", le tour est joué.

J'espère que cela aide quelqu'un d'autre.

2
Gueorgui Obregon

Ajoutez app: elevation = "0dp" sur votre AppBarLayout. comme cet exemple

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    app:elevation="0dp"
    Android:theme="@style/AppTheme.AppBarOverlay">

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

</Android.support.design.widget.AppBarLayout>
1

Utilisez Android:stateListAnimator="@null". Aucun effet secondaire.

<Android.support.design.widget.AppBarLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:animateLayoutChanges="true"
    Android:stateListAnimator="@null"
    >
0
Softlion

Par programme, vous pouvez utiliser ceci: GetSupportActionBar (). SetElevation (0.0f);

0
Bye Webster

C’est la façon dont j’ai eu l’idée de app:elevation="0dp" pour supprimer l’ombre.

0
arc_shiva