Bei Verwendung des AppBarLayout
Widgets in der Designunterstützungsbibliothek wird unten in der Symbolleiste ein Schatten angezeigt. Wie kann ich diesen Schatten entfernen?
Bei Verwendung des AppBarLayout
Widgets in der Designunterstützungsbibliothek wird unten in der Symbolleiste ein Schatten angezeigt. Wie kann ich diesen Schatten entfernen?
Antworten:
Verwenden Sie einfach app:elevation="0dp"
"AppBarLayout", um den Schatten zu entfernen. Es hat immer für mich funktioniert. Hoffe es funktioniert für dich.
setOutlineProvider
Dieses Problem tritt nur auf, wenn die API-Version> = 21 ist. Wenn Sie die Höhe nicht ändern möchten, können Sie Folgendes verwenden:
appBar.setOutlineProvider(null);
Denken Sie daran, die API-Version zu überprüfen
EDIT:
Schlag ist der Quellcode von 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();
}
Es wurde gesagt, dass 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.
Wenn Sie also Schatten entfernen möchten, sollten Sie diese Methode verwenden, anstatt sie festzulegen app:elevation
. Es scheint, dass das Ändern der Höhe zum Entfernen von Schatten eine Art Nebeneffekt ist. In einigen Fällen kann das Ändern der Höhe zu anderen Problemen führen.
Für alle, die die Symbolleiste nicht verwenden möchten bringToFront()
und elevation="0dp"
verschwinden lassen:
app:elevation="0dp"
kombiniert mit android:translationZ="0.1dp"
arbeitete für mich.
<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>
Mit den neuesten Appcompat-Versionen funktioniert die Trickeinstellung app:elevation="0.1dp"
in XML nicht mehr.
Bisher habe ich zwei Lösungen gefunden.
app:elevation
Versuchen Sie statt der Einstellung einen stateListAnimator zu verwenden. Zum Beispiel im Code:
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);
}
Eine einfachere Möglichkeit besteht darin, dass Sie weiterhin app:elevation="0dp"
wie gewohnt in XML, jedoch im Code festlegen :
appBarLayout.bringToFront();
Dank geht an diese beiden Diskussionen:
Die Symbolleiste verschwindet, wenn die Höhe für AppBarLayout festgelegt wird
Ich habe versucht, app:elevation="0dp"
aber die Symbolleiste verschwindet, aber mitapp:elevation="0.1dp"
hat der Trick gemacht.
Hoffe das hilft jemand anderem.
v25.0.0
.
App hinzufügen: height = "0dp" in Ihrem AppBarLayout. wie dieses Beispiel
<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>
Programmatisch können Sie Folgendes verwenden: getSupportActionBar (). SetElevation (0.0f);