Quando si utilizza il AppBarLayoutwidget nella libreria di supporto alla progettazione, viene visualizzata un'ombra nella parte inferiore della barra degli strumenti. Come posso rimuovere quell'ombra?
Quando si utilizza il AppBarLayoutwidget nella libreria di supporto alla progettazione, viene visualizzata un'ombra nella parte inferiore della barra degli strumenti. Come posso rimuovere quell'ombra?
Risposte:
Usa semplicemente app:elevation="0dp""AppBarLayout" per rimuovere l'ombra. Ha sempre funzionato per me. Spero che funzioni per te.
setOutlineProvider
questo problema si verifica solo quando la versione api> = 21, se non si desidera modificare l'elevazione, è possibile utilizzare:
appBar.setOutlineProvider(null);
ricordati di controllare la versione API
MODIFICARE :
Blow è il codice sorgente di 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();
}
Si dice che 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.
Quindi, se vuoi rimuovere l'ombra, faresti meglio a usare questo metodo invece di impostare app:elevation. Sembra che modificare l'elevazione per rimuovere l'ombra sia una sorta di effetto collaterale. E la modifica dell'elevazione può causare altri problemi in alcuni casi.
Per tutti coloro che non vogliono utilizzare bringToFront()e elevation="0dp"fa sparire la barra degli strumenti:
app:elevation="0dp"combinato con android:translationZ="0.1dp"lavorato per me.
<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 le ultime versioni di appcompat, l'impostazione del trucco app:elevation="0.1dp"in xml non funziona più.
Finora ho trovato due soluzioni.
Invece di impostare app:elevation, prova a utilizzare stateListAnimator. Ad esempio, nel codice:
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);
}Un modo più semplice è ancora impostare app:elevation="0dp"in xml come di consueto, ma nel codice:
appBarLayout.bringToFront();Il merito va a queste due discussioni:
ToolBar scompare quando si imposta l'elevazione per AppBarLayout
Ho provato app:elevation="0dp"ma la barra degli strumenti scompare, ma usando ha app:elevation="0.1dp"fatto il trucco.
Spero che questo aiuti qualcun altro.
v25.0.0.
Aggiungi app: elevazione = "0dp" su AppBarLayout. come questo esempio
<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>
A livello di programmazione è possibile utilizzare questo: getSupportActionBar (). SetElevation (0.0f);