AppBarLayout widget'ının altındaki gölgeyi kaldır android


98

AppBarLayoutTasarım destek kitaplığında pencere öğesi kullanılırken , araç çubuğunun altında bir gölge belirir. Bu gölgeyi nasıl kaldırabilirim?

Yanıtlar:


242

app:elevation="0dp"Gölgeyi kaldırmak için "AppBarLayout" içinde kullanın . Benim için her zaman çalıştı. Umarım sizin için çalışır.


71
Android: elevation kullanmayın. Uygulamayı kullan: yükseklik.
— radley

4
Yükseklik ayarının yalnızca L'den sonra kullanılabileceği uyarısını almadan programlı olarak yapmanın bir yolu var mı?
— davidcv5

2
app: elevation = "0dp", gölge kaldırıldı, ancak artık sekmeler tıklanabilir değil.
— Sandeep P

8
0dp olarak ayarlamak Araç Çubuğunu gizler.
— Shajeel Afzal

1
Maalesef artık geçerli bir cevap değil. Aşağıdaki Liu Teng'in cevabına bakınsetOutlineProvider
— Matthew

49

bu sorun yalnızca api sürümü> = 21 olduğunda ortaya çıkar , yüksekliği değiştirmek istemiyorsanız şunu kullanabilirsiniz:

appBar.setOutlineProvider(null);

api sürümünü kontrol etmeyi unutmayın


DÜZENLE :

Blow, kaynak kodudur 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();
    }

Şöyle söylenir 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.

Bu nedenle, gölgeyi kaldırmak istiyorsanız , ayarlamak yerine bu yöntemi kullanmalısınız app:elevation. Gölgeyi kaldırmak için yüksekliği değiştirmenin bir tür yan etki olduğu görülüyor. Ve yüksekliğin değiştirilmesi bazı durumlarda başka sorunlara neden olabilir.


API yalnızca 21 sürümünden itibaren mevcuttur.
— chakrapani

API <21 ile ne yapılmalı?
— DYS

bu sorunlar sadece api> = 21 olduğunda ortaya çıkar
— Liu Teng

9

Araç çubuğunu kullanmak istemeyen bringToFront()ve elevation="0dp"kaybolan herkes için :

app:elevation="0dp"ile taranmış android:translationZ="0.1dp"benim için çalıştı.

<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>

8

En yeni appcompat sürümleriyle, xml'deki hile ayarı app:elevation="0.1dp"artık çalışmıyor.

Şimdiye kadar iki çözüm buldum.

  1. Ayarlamak yerine app:elevationbir stateListAnimator kullanmayı deneyin. Örneğin, kodda:

    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);
    }
    
  2. Daha kolay bir yol, app:elevation="0dp"xml'de normal olarak ayarlamanızdır , ancak kodda:

    appBarLayout.bringToFront();
    

Kredi şu iki tartışmaya gider:

AppBarLayout için yükseklik ayarlarken ToolBar kayboluyor

uygulama ayarlandığında: elevation = "0dp" ve ardından hamburgermenu araç çubuğunda gösterilmiyor


3

Kullanın android:stateListAnimator="@null". Yan etki yok.

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:animateLayoutChanges="true"
    android:stateListAnimator="@null"
    >

2

Denedim app:elevation="0dp"ama araç çubuğu kayboldu, ancak kullanmak app:elevation="0.1dp"hile yaptı.

Umarım bu başka birine yardımcı olur.


0.1dp de çalışmıyor, Araç Çubuğu Menüsünü de gizliyor.
— Shajeel Afzal

Bu ipuçlarını kullanan appcompat v23.0.1 ile çalışan bir uygulamam var, hangi sürüme sahipsiniz?
— Gueorgui Obregon

Ben kullanıyorum v25.0.0.
— Shajeel Afzal

2
Görünüşe göre güncellenmiş sürümlerle artık çalışmıyor :(.
— Gueorgui Obregon

2

AppBarLayout'unuza app: elevation = "0dp" ekleyin. bu örnek gibi

<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>

Hayat kurtaran cevap :)
— user2672052

1

Programlı olarak şunu kullanabilirsiniz: getSupportActionBar (). SetElevation (0.0f);


0

app:elevation="0dp"Gölgeyi kaldırmak için bulduğum yol bu . Mükemmel çalışıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.