Hapus bayangan di bawah actionbar


208

Saya menggunakan actionbarsherlock. Sepotong kode di bawah ini bertanggung jawab untuk mengubah latar belakangnya menjadi kustom.

<style name="Widget.Styled.ActionBar" parent="Widget.Sherlock.ActionBar">
    <item name="background">@drawable/actionbar_bg</item>
    <item name="android:background">@drawable/actionbar_bg</item>
    <...>  
</style>

<style name="Theme.MyApp" parent="@style/Theme.Sherlock.Light">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <..>
</style>

Dan itu berfungsi untuk actionbarsherlock (pada versi di bawah honeycomb). Tetapi di ICS saya memiliki bayangan di bawah actionbar yang tidak saya inginkan. Apa item gaya untuk menghilangkannya?

Jawaban:


481

Apa item gaya untuk menghilangkannya?

Untuk menghapus bayangan, tambahkan ini ke tema aplikasi Anda:

<style name="MyAppTheme" parent="android:Theme.Holo.Light">
    <item name="android:windowContentOverlay">@null</item>
</style>

UPDATE: Seperti yang dikatakan @ Quinny898, di Android 5.0 ini telah berubah, Anda harus memanggil setElevation(0)bilah tindakan Anda. Perhatikan bahwa jika Anda menggunakan perpustakaan dukungan, Anda harus memanggilnya seperti itu:

getSupportActionBar().setElevation(0);

Bukankah itu gaya untuk menghapus bayangan dari bawah bilah status, bukan bilah tindakan?
Michał K

96
Terima kasih, itu menghilang. Hal penting yang perlu diperhatikan adalah baris kode ini harus muncul dalam tema aplikasi, bukan gaya actionbar.
Michał K

3
Saya bekerja! Yang perlu jelas adalah bahwa baris kode ini harus ditambahkan di Tag Tema Aplikasi, bukan tag Tema ActionBar.
tuoxie007

Dan hal lain yang juga harus diperhatikan adalah bahwa Anda harus mengubah tema Anda dalam nilai, nilai-v11, nilai-v14 (jika Anda menggunakan bilah alat, abaikan ini)
TheOne_su

6
untuk perangkat pra-lolipop getSupportActionBar().setElevation(0);tidak berfungsi. Jadi Anda telah memasukkan <item name="android:windowContentOverlay">@null</item>tema aplikasi Anda. Saya punya masalah yang sama. Sekarang saya sudah berdua. setElevation from dan menambahkan item windowContentOverlay dalam tema aplikasi. setElevation berfungsi untuk android 5.0 dan lebih tinggi sementara yang lain berfungsi untuk pre-lollipop. Bersulang!
Reaz Murshed

140

Untuk Android 5.0, jika Anda ingin mengaturnya langsung menjadi gaya gunakan:

<item name="android:elevation">0dp</item>

dan untuk penggunaan kompatibilitas perpustakaan Dukungan:

<item name="elevation">0dp</item>

Contoh gaya untuk tema cahaya AppCompat:

<style name="Theme.MyApp.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <!-- remove shadow below action bar -->
    <!-- <item name="android:elevation">0dp</item> -->
    <!-- Support library compatibility -->
    <item name="elevation">0dp</item>
</style>

Kemudian terapkan gaya ActionBar khusus ini ke tema aplikasi Anda:

<style name="Theme.MyApp" parent="Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/Theme.MyApp.ActionBar</item>
</style>

Untuk Android pra 5.0, tambahkan ini juga ke tema aplikasi Anda:

<!-- Remove shadow below action bar Android < 5.0 -->
<item name="android:windowContentOverlay">@null</item>

1
Tidak berfungsi untuk saya untuk perangkat pra 5.0. Masalahnya adalah, saya menambahkan windowContentOverlayke action bar theme, bukan ke theme app.
Oliv

Maaf, tetapi saya mencoba melakukan hal yang sebaliknya, Membuat bayangan elevasi benar-benar muncul pada perangkat pre-lollipop (Saya sudah berhasil melakukannya dengan android:elevationuntuk perangkat Lollipop). Saya tidak bisa melakukannya, menggunakan pendekatan ini. Saya percaya itu akan cukup lurus. Letakkan nilai bukan nol untuk atribut elevasi dan hanya itu saja.
acrespo

Seharusnya terlihat secara default jika Anda tidak menyentuh atribut android: windowContentOverlay, mungkin periksa apakah Anda menggunakan tema yang benar ... Saya pikir Anda perlu menggunakan tema AppCompat.
Sloosh

tapi bagaimana menghadapinya dengan android:windowContentOverlayAPI pre lollipop? Saya tidak dapat mengkompilasi jika minSDK saya adalah pre lollipop tetapi targetnya adalah 21?
Opiatefuchs

2
Ini bekerja tetapi hanya ketika saya digunakan <style name="Theme.MyApp.ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">tanpa style/di parentatribut.
Igor

103

Pada Android 5.0 ini telah berubah, Anda harus memanggil setElevation (0) pada bilah tindakan Anda. Perhatikan bahwa jika Anda menggunakan perpustakaan dukungan, Anda harus memanggilnya seperti itu:

getSupportActionBar().setElevation(0);

Ini tidak terpengaruh oleh item gaya windowContentOverlay, jadi tidak diperlukan perubahan gaya


1
Apakah Anda harus melakukan ini untuk setiap kegiatan, atau apakah ada metode cepat untuk menerapkannya ke semua kegiatan? Saya akan menambahkan ini semua kegiatan saya untuk saat ini. Terima kasih!
cnfw

Seperti halnya metode actionbar lainnya (mis. Judulnya), saya akan mengatakan setiap kegiatan
Kieron

Itu memalukan. Akan menyenangkan untuk mengatur parameter seperti ini di file styles.xml. Mungkin itu akan datang di pembaruan masa depan
cnfw

ini tidak berfungsi pada versi yang lebih rendah dari 5.0. Bukankah bilah tindakan dukungan seharusnya kompatibel dengan semua perangkat sebelumnya?
splinter123

sama dengan @ splinter123 di sini :( Bertanya-tanya bagaimana saya bisa menghapus bayangan di pra-Lollipop saat menggunakan AppCompat.
FD_

55

tambahkan app:elevation="0dp"di AppBarLayout untuk menyembunyikan bayangan di appbar


1
Lihat semua orang, terapkan saja solusi ini dan lupakan apa yang dikatakan orang lain. Terima kasih sobat! berhasil! Solusi yang sangat sederhana!
S bruce

1
Gunakan seperti ini: <android.support.design.widget.AppBarLayout android: layout_width = "match_parent" android: layout_height = "wrap_content" app: elevasi = "0dp" android: theme = "@ style / AppTheme.AppBarOverlay">
Bharat Kul Ratan

@MarcoFerrari Gunakan ini untuk AppBarLayout sebagai 'getSupportActionBar (). SetElevation (0);' tidak bekerja
Salil Dhawan

39

Jika Anda bekerja dengan ActionBarSherlock

Dalam tema Anda, tambahkan ini:

<style name="MyTheme" parent="Theme.Sherlock">
    ....
    <item name="windowContentOverlay">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    ....
</style>

ini adalah jawaban yang lebih baik, ini menentukan item kompatibilitas
1owk3y

25

Anda harus mengatur app:elevation="0dp"dalam android.support.design.widget.AppBarLayoutdan kemudian berfungsi.

<android.support.design.widget.AppBarLayout
    app:elevation="0dp"... >

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@android:color/transparent"
        app:popupTheme="@style/AppTheme.PopupOverlay" >


    </android.support.v7.widget.Toolbar>

</android.support.design.widget.AppBarLayout>

1
ini menyebabkan, bahwa bayangan AppBar ada di mana-mana - bagaimana saya bisa mengendalikannya secara terprogram?
Suisse

14
app:elevation="0dp" 

tapi tidak

android:elevation="0dp"

bekerja untuk saya di Android L


2

Saya memiliki masalah yang sama, dan saya berhasil menyelesaikan masalah ini. Yang harus Anda lakukan hanyalah mengubah nilai elevasi menjadi 0 floating point dalam aktivitas di mana Anda ingin menghapus ketinggian.

Jika Anda ingin mengubahnya dalam suatu aktivitas yang dipanggil MyActivity.javamaka Anda harus mendapatkannyaActionBar pertama.

Impor ActionBarkelas terlebih dahulu

import android.support.v7.app.ActionBar;

setelah mengimpor Anda harus menginisialisasi variabel bar tindakan dan mengatur ketinggiannya ke 0.

 private ActionBar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    .
    .
    toolbar=getSupportActionBar();
    toolbar.setElevation(0);
    .
    .
    }

1

Untuk Pengembang Xamarin, silakan gunakan: SupportActionBar.Elevation = 0;untuk AppCompatActivityatau ActionBar.Elevation = 0;untuk Kegiatan yang tidak sesuai


1

Solusi untuk Kotlin (Android 3.3, Kotlin 1.3.20)

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    supportActionBar!!.elevation = 0f
}

Tidak yakin mengapa ini dibatalkan (saya baru di Kotlin) tetapi ini bekerja untuk saya di mana orang lain tidak
Allen Wixted

1

Coba ini membantu saya tanpa mengubah tema. Letakkan AppBarLayout Anda di dalam tata letak apa pun. Semoga ini bisa membantu Anda

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="false"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">


    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        android:layout_height="?attr/actionBarSize"
       android:background="@color/white">
        <ImageView
            android:src="@drawable/go_grocery_logo"
            android:layout_width="108dp"
            android:layout_height="32dp" />
    </android.support.v7.widget.Toolbar>


</android.support.design.widget.AppBarLayout>
</RelativeLayout>

0

Bagi mereka yang mengerjakan fragmen dan menghilang setelah pengaturan toolbar.getBackground().setAlpha(0);atau penghilangan apa pun, saya pikir Anda harus membawa AppBarLayout Anda ke yang terakhir di xml, jadi Fragmennya kemudian AppBarLayout lalu relativelayout / constraint / linear mana pun yang Anda gunakan.


0

Tambahkan ini toolbar.getBackground().setAlpha(0);ke dalam metode OnCreate. Tambahkan ini: android:elevation="0dp" android:background="@android:color/transparent ke file xml toolbar Anda.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.