Saya memiliki ListView, dan dengan setiap item daftar, saya ingin menampilkan bayangan di bawahnya. Saya menggunakan fitur elevasi baru Android Lollipop untuk menetapkan Z pada Tampilan yang ingin saya buat bayangan, dan saya sudah melakukan ini secara efektif dengan ActionBar (secara teknis Toolbar di Lollipop). Saya menggunakan elevasi Lollipop, tetapi untuk beberapa alasan itu tidak menunjukkan bayangan di bawah daftar item. Berikut adalah cara mengatur tata letak setiap item daftar:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
style="@style/block"
android:gravity="center"
android:layout_gravity="center"
android:background="@color/lightgray"
>
<RelativeLayout
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_marginLeft="40dp"
android:layout_marginRight="40dp"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:elevation="30dp"
>
<ImageView
android:id="@+id/documentImageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/alphared"
android:layout_alignParentBottom="true" >
<appuccino.simplyscan.Extra.CustomTextView
android:id="@+id/documentName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
app:typeface="light"
android:paddingLeft="16dp"
android:paddingTop="8dp"
android:paddingBottom="4dp"
android:singleLine="true"
android:text="New Document"
android:textSize="27sp"/>
<appuccino.simplyscan.Extra.CustomTextView
android:id="@+id/documentPageCount"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/white"
app:typeface="italic"
android:paddingLeft="16dp"
android:layout_marginBottom="16dp"
android:text="1 page"
android:textSize="20sp"/>
</LinearLayout>
</RelativeLayout>
</RelativeLayout>
Namun, di sini adalah bagaimana ia menampilkan item daftar, tanpa bayangan:
Saya juga mencoba yang berikut ini tanpa hasil:
- Atur elevasi ke ImageView dan TextViews sendiri daripada tata letak induk.
- Menerapkan latar belakang ke ImageView.
- Digunakan TranslationZ sebagai pengganti Elevation.
android
material-design
shadow
android-elevation
AggieDev
sumber
sumber
Jawaban:
Saya telah bermain-main dengan bayangan di Lollipop sebentar dan inilah yang saya temukan:
ViewGroup
memotong bayangan anak-anaknya karena suatu alasan; danandroid:elevation
olehView
batas, bukan batas yang diperpanjang melalui margin;android:clipToPadding="false"
pada orang tua itu.Berikut saran saya kepada Anda berdasarkan apa yang saya ketahui:
RelativeLayout
agar memiliki padding yang sama dengan margin yang Anda tetapkan pada tata letak relatif yang ingin Anda tampilkan bayangan;android:clipToPadding="false"
pada yang samaRelativeLayout
;RelativeLayout
yang juga memiliki set ketinggian;Pada akhirnya, tata letak relatif tingkat atas Anda akan terlihat seperti ini:
Tata letak relatif interior akan terlihat seperti ini:
sumber
Jika Anda memiliki pandangan tanpa latar belakang, baris ini akan membantu Anda
Secara default bayangan ditentukan oleh latar belakang tampilan, jadi jika tidak ada latar belakang, tidak akan ada bayangan juga.
sumber
<solid>
.none
. Terima kasih!Rupanya, Anda tidak bisa hanya mengatur ketinggian pada Tampilan dan membuatnya muncul. Anda juga perlu menentukan latar belakang.
Baris berikut yang ditambahkan ke LinearLayout saya akhirnya menunjukkan bayangan:
sumber
satu hal lain yang harus Anda perhatikan, bayangan tidak akan muncul jika Anda memiliki baris ini di manifes:
android: hardwareAccelerated = "false"
Saya mencoba semua hal yang disarankan tetapi itu hanya bekerja untuk saya ketika saya menghapus garis, alasan saya memiliki garis itu karena aplikasi saya bekerja dengan sejumlah gambar bitmap dan mereka menyebabkan aplikasi mogok.
sumber
android:clipToPadding="false"
dengan solusi ini.Jika Anda memiliki pandangan tanpa latar belakang, baris ini akan membantu Anda
Jika Anda memiliki tampilan dengan latar belakang, baris ini akan membantu Anda
sumber
android:outlineProvider="paddedBounds"
baris ini bekerja untuk saya. Saya mengatur Selector Drawable.Jika Anda menambahkan elevasi ke elemen tombol, Anda perlu menambahkan baris berikut:
Lihat Android 5.0 android: elevasi Bekerja untuk Tampilan, tetapi tidak untuk Tombol?
sumber
Ugh, baru menghabiskan satu jam mencoba mencari tahu ini. Dalam kasus saya, saya memiliki latar belakang, namun diatur ke warna. Ini tidak cukup, Anda harus memiliki latar belakang tampilan yang ditetapkan untuk digambar.
mis. Ini tidak akan memiliki bayangan:
tapi ini akan
EDIT: Juga menemukan bahwa jika Anda menggunakan pemilih sebagai latar belakang, jika Anda tidak memiliki sudut diatur maka bayangan tidak akan muncul di jendela Pratinjau tetapi akan muncul di perangkat
mis. Ini tidak memiliki bayangan dalam pratinjau:
tetapi ini:
sumber
Menambahkan warna latar belakang membantu saya.
sumber
Kadang suka
background="@color/***"
ataubackground="#ff33**"
tidak berfungsi, saya gantibackground_color
dengan drawable, lalu berhasilsumber
Jika masih belum menunjukkan ketinggian coba
ini pasti akan membantu Anda.
sumber
Jika Anda ingin memiliki latar belakang transparan dan
android:outlineProvider="bounds"
tidak bekerja untuk Anda, Anda dapat membuat ViewOutlineProvider kustom:Dan atur penyedia ini ke tampilan transparan Anda:
Sumber: https://code.google.com/p/android/issues/detail?id=78248#c13
[EDIT] Dokumentasi Drawable.getAlpha () mengatakan bahwa itu khusus untuk bagaimana Drawable mengancam alpha. Ada kemungkinan bahwa itu akan selalu mengembalikan 255. Dalam hal ini Anda dapat memberikan alpha secara manual:
Jika latar belakang tampilan Anda adalah StateListDrawable dengan warna default # DDFF0000 yaitu dengan alpha DDx0 / FFx0 == 0,86
sumber
berikan beberapa warna latar belakang untuk tata letak yang bekerja untuk saya seperti:
sumber
Saya beruntung dengan pengaturan
clipChildren="false"
tata letak induk.sumber
Saya menghabiskan beberapa waktu mengerjakannya dan akhirnya menyadari bahwa ketika latar belakang gelap, bayangan tidak terlihat
sumber
Menambah jawaban yang diterima, ada satu alasan lagi karena ketinggian yang mungkin tidak berfungsi seperti yang diharapkan jika fitur filter Bluelight pada ponsel AKTIF.
Saya menghadapi masalah ini ketika ketinggian tampak sangat menyimpang dan tak tertahankan di perangkat saya. Tapi ketinggiannya baik-baik saja di pratinjau. Mematikan filter Bluelight di ponsel menyelesaikan masalah.
Begitu pun setelah pengaturan
Ketinggian tidak berfungsi dengan benar, maka Anda dapat mencoba mengotak-atik pengaturan warna ponsel.
sumber
Saya percaya masalah Anda berasal dari fakta bahwa Anda telah menerapkan elemen elevasi ke tata letak relatif yang mengisi induknya. Induknya memotong semua tampilan anak di dalam kanvas gambarnya sendiri (dan merupakan tampilan yang menangani bayangan anak). Anda dapat memperbaikinya dengan menerapkan properti elevasi ke atas
RelativeLayout
di tampilan xml Anda (tag root).sumber
Dalam kasus saya font adalah masalahnya.
1) Tanpa
fontFamily
saya perlu menetapkanandroid:background
beberapa nilai.2) dengan
fontFamily
saya harus menambahkanandroid:outlineProvider="bounds"
pengaturan:sumber
Dalam kasus saya, ini disebabkan oleh komponen induk kustom yang menyetel jenis lapisan rendering ke "Software":
Menghapus garis ini berhasil. Atau tentu saja Anda perlu mengevaluasi mengapa ini ada di tempat pertama. Dalam kasus saya itu adalah untuk mendukung Honeycomb, yang jauh di belakang SDK minimum saat ini untuk proyek saya.
sumber
Periksa juga apakah Anda tidak mengubah alpha pada tampilan itu. Saya sedang menyelidiki masalah ketika saya mengubah alpha pada beberapa tampilan, dengan elevasi. Mereka hanya kehilangan ketinggian ketika alpha diubah dan diubah kembali ke 1f.
sumber