Cuando se usa un AppBarLayout
widget en la biblioteca de soporte de diseño, aparece una sombra en la parte inferior de la barra de herramientas. ¿Cómo puedo eliminar esa sombra?
Cuando se usa un AppBarLayout
widget en la biblioteca de soporte de diseño, aparece una sombra en la parte inferior de la barra de herramientas. ¿Cómo puedo eliminar esa sombra?
Respuestas:
Simplemente use app:elevation="0dp"
dentro de "AppBarLayout" para eliminar la sombra. Siempre me ha funcionado. Espero que funcione para ti.
setOutlineProvider
este problema solo ocurre cuando la versión de api> = 21, si no desea cambiar la elevación, puede usar:
appBar.setOutlineProvider(null);
recuerde verificar la versión de api
EDITAR:
Blow es el código fuente de 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();
}
Se dice que 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.
Por lo tanto, si desea eliminar la sombra, será mejor que use este método en lugar de configurar app:elevation
. Parece que cambiar la elevación para eliminar la sombra es una especie de efecto secundario. Y cambiar la elevación puede causar otros problemas en algunos casos.
Para todos aquellos que no quieran usar bringToFront()
y elevation="0dp"
hace desaparecer la barra de herramientas:
app:elevation="0dp"
combinado con android:translationZ="0.1dp"
funcionó para mí.
<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>
Con las últimas versiones de appcompat, la configuración de trucos app:elevation="0.1dp"
en xml ya no funciona.
Hasta ahora he encontrado dos soluciones.
En lugar de configurar app:elevation
, intente usar un stateListAnimator. Por ejemplo, en código:
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);
}
Una forma más fácil es seguir configurando app:elevation="0dp"
xml como de costumbre, pero en el código:
appBarLayout.bringToFront();
El crédito va a estas dos discusiones:
ToolBar desaparece al configurar la elevación para AppBarLayout
Lo intenté, app:elevation="0dp"
pero la barra de herramientas desapareció, pero el uso app:elevation="0.1dp"
hizo el truco.
Espero que esto ayude a alguien más.
v25.0.0
.
Agregue la aplicación: elevación = "0dp" en su AppBarLayout. como este ejemplo
<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>
Programáticamente puede usar esto: getSupportActionBar (). SetElevation (0.0f);