hapus bayangan di bawah widget AppBarLayout android

94

Saat menggunakan AppBarLayoutwidget di pustaka dukungan desain, bayangan muncul di bagian bawah toolbar. Bagaimana cara menghapus bayangan itu?

Abdul Rehman
sumber

Jawaban:

233

Cukup gunakan app:elevation="0dp"di dalam "AppBarLayout" untuk menghapus bayangan. Itu selalu berhasil untuk saya. Semoga berhasil untuk Anda.

danialzahid94
sumber
64
Jangan gunakan android: elevasi. Gunakan aplikasi: ketinggian.
radley
4
Apakah ada cara untuk melakukannya secara terprogram tanpa mendapatkan peringatan bahwa pengaturan ketinggian hanya tersedia setelah L?
davidcv5
2
app: elevation = "0dp", bayangan dihapus, tetapi sekarang tab tidak dapat diklik.
Sandeep P
8
Menyetelnya ke 0dp menyembunyikan Toolbar.
Shajeel Afzal
1
Sayangnya tidak ada lagi jawaban yang berhasil. Lihat jawaban Liu Teng di bawah ini dengansetOutlineProvider
Matthew
49

masalah ini hanya terjadi ketika api versi> = 21, jika Anda tidak ingin mengubah ketinggian, Anda dapat menggunakan:

appBar.setOutlineProvider(null);

ingatlah untuk memeriksa versi api


EDIT:

Pukulan adalah kode sumber 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();
    }

Dikatakan bahwa 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.

Jadi, jika Anda ingin menghapus bayangan, sebaiknya Anda menggunakan metode ini daripada pengaturan app:elevation. Tampaknya mengubah ketinggian untuk menghilangkan bayangan adalah semacam efek samping. Dan mengubah ketinggian dapat menyebabkan beberapa masalah lain dalam beberapa kasus.

Liu Teng
sumber
API hanya tersedia dari versi 21.
chakrapani
Apa yang harus dilakukan dengan API <21?
DYS
masalah ini hanya terjadi ketika api> = 21
Liu Teng
9

Untuk semua yang tidak ingin menggunakan bringToFront()dan elevation="0dp"membuat bilah alat menghilang:

app:elevation="0dp"disisir dengan android:translationZ="0.1dp"bekerja untuk saya.

<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>
fupduck.dll
sumber
8

Dengan versi appcompat terbaru, setelan trik app:elevation="0.1dp"di xml tidak berfungsi lagi.

Sejauh ini saya telah menemukan dua solusi.

  1. Alih-alih menyetel app:elevation, coba gunakan stateListAnimator. Misalnya dalam kode:

    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. Cara yang lebih mudah adalah Anda tetap mengatur app:elevation="0dp"xml seperti biasa, tetapi dalam kode:

    appBarLayout.bringToFront();

Penghargaan diberikan untuk dua diskusi ini:

ToolBar menghilang saat menyetel ketinggian untuk AppBarLayout

ketika mengatur app: elevation = "0dp" maka hamburgermenu tidak muncul ke toolbar

gaolei
sumber
3

Gunakan android:stateListAnimator="@null". Tidak ada efek samping.

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

Saya mencoba app:elevation="0dp"tetapi bilah alat hilang, tetapi menggunakan app:elevation="0.1dp"membuat trik.

Semoga ini bisa membantu orang lain.

Gueorgui Obregon
sumber
0.1dp juga tidak berfungsi, Ini juga menyembunyikan Menu Toolbar.
Shajeel Afzal
Saya memiliki aplikasi yang berfungsi dengan appcompat v23.0.1 menggunakan tip ini, versi apa yang Anda miliki?
Gueorgui Obregon
Saya menggunakan v25.0.0.
Shajeel Afzal
2
Sepertinya tidak berfungsi lagi dengan versi yang diperbarui :(.
Gueorgui Obregon
2

Tambahkan app: elevation = "0dp" di AppBarLayout Anda. seperti contoh ini

<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>
Faxriddin Abdullayev
sumber
Jawaban penyelamat hidup :)
pengguna2672052
1

Secara terprogram Anda dapat menggunakan ini: getSupportActionBar (). SetElevation (0.0f);

Iam ByeBlogs
sumber
0

Ini adalah cara yang saya app:elevation="0dp"pikirkan untuk menghilangkan bayangan. Bekerja dengan sempurna.

arc_shiva
sumber