При використанні 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();
Заслуга цих двох обговорень:
Панель інструментів зникає при встановленні висоти для AppBarLayout
Я спробував, app:elevation="0dp"
але панель інструментів не відображається, але використовуючиapp:elevation="0.1dp"
зробило фокус.
Сподіваюся, це допомагає комусь іншому.
v25.0.0
.
Додайте додаток: 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);