Podczas korzystania z AppBarLayout
widgetu w bibliotece wsparcia projektowania, na dole paska narzędzi pojawia się cień. Jak mogę usunąć ten cień?
Podczas korzystania z AppBarLayout
widgetu w bibliotece wsparcia projektowania, na dole paska narzędzi pojawia się cień. Jak mogę usunąć ten cień?
Odpowiedzi:
Po prostu użyj app:elevation="0dp"
wewnątrz „AppBarLayout”, aby usunąć cień. Zawsze mi się to udało. Mam nadzieję, że to działa dla Ciebie.
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.
Dla wszystkich, którzy nie chcą używać bringToFront()
i elevation="0dp"
sprawiają, że pasek narzędzi znika:
app:elevation="0dp"
w połączeniu z android: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>
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
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.
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>
Programowo możesz użyć tego: getSupportActionBar (). SetElevation (0.0f);