При использовании AppBarLayout
виджета в библиотеке поддержки дизайна в нижней части панели инструментов появляется тень. Как мне убрать эту тень?
При использовании AppBarLayout
виджета в библиотеке поддержки дизайна в нижней части панели инструментов появляется тень. Как мне убрать эту тень?
Ответы:
Просто используйте app:elevation="0dp"
внутри «AppBarLayout», чтобы удалить тень. У меня это всегда срабатывало. Надеюсь, это сработает для вас.
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" гамбургерменю не отображается на панели инструментов
Я попробовал, 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);