При использовании AppBarLayout
виджета в библиотеке поддержки дизайна в нижней части панели инструментов появляется тень. Как мне убрать эту тень?
android
android-layout
Абдул Рехман
источник
источник
setOutlineProvider
эта проблема возникает только при версии 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'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(); }
Он сказал, что
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
. Похоже, что изменение высоты для удаления тени - своего рода побочный эффект. А изменение высоты в некоторых случаях может вызвать другие проблемы.источник
Для всех, кто не хочет пользоваться
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>
источник
В последних версиях 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
при установке app: elevation = "0dp" гамбургерменю не отображается на панели инструментов
источник
Используйте
android:stateListAnimator="@null"
. Никаких побочных эффектов.<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:animateLayoutChanges="true" android:stateListAnimator="@null" >
источник
Я попробовал,
app:elevation="0dp"
но панель инструментов исчезла, но использование помоглоapp:elevation="0.1dp"
.Надеюсь, это поможет кому-то другому.
источник
v25.0.0
.Добавьте 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>
источник
Программно вы можете использовать это: getSupportActionBar (). SetElevation (0.0f);
источник
Это способ
app:elevation="0dp"
удаления тени, который я придумал, отлично работает.источник