Podczas korzystania z AppBarLayout
widgetu w bibliotece wsparcia projektowania, na dole paska narzędzi pojawia się cień. Jak mogę usunąć ten cień?
android
android-layout
Abdul Rehman
źródło
źródło
setOutlineProvider
ten problem występuje tylko wtedy, gdy wersja api> = 21, jeśli nie chcesz zmieniać elewacji, możesz użyć:
appBar.setOutlineProvider(null);
pamiętaj, aby sprawdzić wersję api
EDYTOWAĆ :
Blow jest kodem źródłowym
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(); }
Mówi się, że
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.
Tak więc, jeśli chcesz usunąć cień, lepiej użyj tej metody zamiast ustawiania
app:elevation
. Wygląda na to, że zmiana elewacji w celu usunięcia cienia jest pewnego rodzaju efektem ubocznym. W niektórych przypadkach zmiana wysokości może powodować inne problemy.źródło
Dla wszystkich, którzy nie chcą używać
bringToFront()
ielevation="0dp"
sprawiają, że pasek narzędzi znika:app:elevation="0dp"
w połączeniu zandroid:translationZ="0.1dp"
pracował dla mnie.<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>
źródło
Z najnowszymi wersjami appcompat, ustawienie triku
app:elevation="0.1dp"
w xml już nie działa.Do tej pory znalazłem dwa rozwiązania.
Zamiast ustawiać
app:elevation
, spróbuj użyć stateListAnimator. Na przykład w kodzie: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); }
Łatwiejszym sposobem jest to, że nadal ustawiasz
app:elevation="0dp"
w XML jak zwykle, ale w kodzie:appBarLayout.bringToFront();
Zasługa tych dwóch dyskusji:
ToolBar znika podczas ustawiania wysokości dla AppBarLayout
po ustawieniu app: elevation = "0dp" wtedy hamburgermenu nie wyświetla się na pasku narzędzi
źródło
Użyj
android:stateListAnimator="@null"
. Brak efektu ubocznego.<android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:animateLayoutChanges="true" android:stateListAnimator="@null" >
źródło
Próbowałem,
app:elevation="0dp"
ale pasek narzędzi zniknął, ale używamapp:elevation="0.1dp"
.Mam nadzieję, że to pomoże komuś innemu.
źródło
v25.0.0
.Dodaj app: elevation = "0dp" do swojego AppBarLayout. jak ten przykład
<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>
źródło
Programowo możesz użyć tego: getSupportActionBar (). SetElevation (0.0f);
źródło
To jest sposób, w jaki wymyśliłem
app:elevation="0dp"
usuwanie cienia, działa idealnie.źródło