При использовании виджета AppBarLayout
в библиотеке поддержки дизайна в нижней части панели инструментов появляется тень. Как удалить эту тень?
Удалить тень под виджета AppBarLayout android
Ответ 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();
Кредит идет на эти два обсуждения:
Ответ 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);.