Удалить тень под виджета AppBarLayout android

При использовании виджета AppBarLayout в библиотеке поддержки дизайна в нижней части панели инструментов появляется тень. Как удалить эту тень?

Ответ 1

Просто используйте app:elevation="0dp" внутри "AppBarLayout", чтобы удалить тень. Это всегда работало для меня. Надеюсь, это работает для вас.

Ответ 2

** эта проблема возникает, только когда версия API> = 21 **, если вы не хотите изменять высоту, вы можете использовать:

appBar.setOutlineProvider(null);

не забудьте проверить версию API


РЕДАКТИРОВАТЬ :

Blow - это исходный код 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 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();
    }

Говорят, что 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.

Так что, если вы хотите удалить тень, вам лучше использовать этот метод вместо настройки app:elevation. Кажется, что изменение высоты, чтобы убрать тень, является своего рода побочным эффектом. И изменение высоты может вызвать некоторые другие проблемы в некоторых случаях.

Ответ 3

С последними версиями appcompat настройка трюка app:elevation="0.1dp" в xml больше не работает.

До сих пор я нашел два решения.

  • Вместо установки app:elevation попробуйте использовать stateListAnimator. Например, в коде:

    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);
    }
    
  • Более простой способ: вы по-прежнему устанавливаете app:elevation="0dp" в xml как обычно, но в коде:

    appBarLayout.bringToFront();
    

Кредит идет на эти два обсуждения:

ToolBar исчезает при настройке высоты для AppBarLayout

при установке приложения: elevation = "0dp" затем hamburgermenu не отображается на панели инструментов

Ответ 4

Для всех тех, кто не хочет использовать bringToFront() и elevation="0dp" панель инструментов исчезает:

app:elevation="0dp" сочетании с android:translationZ="0.1dp" работал для меня.

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

Ответ 5

Я попробовал app:elevation="0dp", но панель инструментов исчезла, но с помощью app:elevation="0.1dp" сделал трюк.

Надеюсь, это поможет кому-то еще.

Ответ 6

Добавить app: elevation = "0dp" в AppBarLayout. как этот пример

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

Ответ 7

Используйте android:stateListAnimator="@null". Нет побочных эффектов.

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

Ответ 8

Именно так я придумал app:elevation="0dp", чтобы удалить shadow.Perfectly works.

Ответ 9

Программно вы можете использовать это: getSupportActionBar() setElevation (0.0f);.