Ao usar o AppBarLayout
widget na biblioteca de suporte de design, uma sombra aparece na parte inferior da barra de ferramentas. Como posso remover essa sombra?
Ao usar o AppBarLayout
widget na biblioteca de suporte de design, uma sombra aparece na parte inferior da barra de ferramentas. Como posso remover essa sombra?
Respostas:
Basta usar app:elevation="0dp"
dentro de "AppBarLayout" para remover a sombra. Sempre trabalhou para mim. Espero que funcione para você.
setOutlineProvider
esse problema só ocorre quando api version> = 21, se você não quiser alterar a elevação, você pode usar:
appBar.setOutlineProvider(null);
lembre-se de verificar a versão da API
EDITAR:
Blow é o código-fonte 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();
}
É dito 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.
Portanto, se você deseja remover a sombra, é melhor usar este método em vez de configurar app:elevation
. Parece que alterar a elevação para remover a sombra é uma espécie de efeito colateral. E alterar a elevação pode causar alguns outros problemas em alguns casos.
Para todos aqueles que não querem usar bringToFront()
e elevation="0dp"
faz desaparecer a barra de ferramentas:
app:elevation="0dp"
combinada com android:translationZ="0.1dp"
funcionou para mim.
<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>
Com as versões mais recentes do appcompat, a configuração do truque app:elevation="0.1dp"
em xml não funciona mais.
Até agora, encontrei duas soluções.
Em vez de definir app:elevation
, tente usar um stateListAnimator. Por exemplo, no 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);
}
Uma maneira mais fácil é ainda definir app:elevation="0dp"
em xml normalmente, mas em código:
appBarLayout.bringToFront();
O crédito vai para essas duas discussões:
ToolBar desaparece ao definir a elevação para AppBarLayout
quando set app: elevation = "0dp" then hamburgermenu not show to toolbar
Tentei, app:elevation="0dp"
mas a barra de ferramentas desapareceu, mas o uso app:elevation="0.1dp"
fez o truque.
Espero que isso ajude mais alguém.
v25.0.0
.
Adicione app: elevation = "0dp" em seu AppBarLayout. como este exemplo
<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>
Programaticamente, você pode usar isto: getSupportActionBar (). SetElevation (0.0f);