Cardview saya di dalam Listview tidak menunjukkan bayangan di Android L (Nexus 5). Juga tepi bundar tidak ditampilkan dengan benar. Berikut adalah kode untuk Tampilan Adaptor Listview:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:app="http://schemas.android.com/apk/res/com.example.myapp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardBackgroundColor="@android:color/white"
android:foreground="?android:attr/selectableItemBackground"
app:cardCornerRadius="4dp"
app:cardElevation="4dp" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingTop="@dimen/activity_vertical_margin" >
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginTop="@dimen/padding_small"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:textAppearance="?android:attr/textAppearanceLarge" />
<ImageView
android:id="@+id/ivPicture"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/tvName"
android:layout_centerHorizontal="true"
android:scaleType="fitCenter" />
<TextView
android:id="@+id/tvDetail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/ivPicture"
android:layout_centerHorizontal="true"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin" />
</RelativeLayout>
</android.support.v7.widget.CardView>
Dan ListView xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res/com.example.myapp"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/app_bg" >
<ListView
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:cacheColorHint="#00000000"
android:divider="@android:color/transparent"
android:drawSelectorOnTop="true"
android:smoothScrollbar="true" />
<ProgressBar
android:id="@+id/progressBarMain"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="gone" /></RelativeLayout>
Ini berfungsi dengan baik pada perangkat pra-L dengan bayangan yang tepat dan sudut membulat. Tapi tidak berfungsi pada perangkat Android L. Bisakah Anda memberi tahu apa yang saya lewatkan di sini?
Jawaban:
Setelah melalui dokumen lagi, akhirnya saya menemukan solusinya.
Cukup tambahkan
card_view:cardUseCompatPadding="true"
ke AndaCardView
dan bayangan akan muncul di perangkat Lollipop.Yang terjadi adalah, area konten di
CardView
ambil dengan ukuran berbeda pada perangkat pra-lollipop dan lollipop. Jadi di perangkat lollipop bayangan benar-benar tertutup oleh kartu sehingga tidak terlihat. Dengan menambahkan atribut ini, area konten tetap sama di semua perangkat dan bayangan menjadi terlihat.Kode xml saya seperti:
sumber
card_view:cardElevation="2sp"
kecard_view:cardElevation="2dp"
?sp
sebaiknya hanya digunakan untuk ukuran teks.dp
harus digunakan untuk semua dimensi lainnya.Jangan lupa bahwa untuk menggambar bayangan Anda harus menggunakan
hardwareAccelerated
gambarhardwareAccelerated = true
hardwareAccelerated = false
Lihat Akselerasi Perangkat Keras Android untuk detailnya
sumber
gunakan
app:cardUseCompatPadding="true"
di dalam cardview Anda. Sebagai contohsumber
periksa perangkat keras Dipercepat dalam manifes membuatnya benar, membuatnya salah menghapus bayangan, ketika bayangan palsu muncul di pratinjau xml tetapi tidak di telepon.
sumber
Tambahkan baris ini ke CardView ....
Tips
Anda dapat menghindari layout_marginTop dan layout_marginBottom karena bayangan itu sendiri membutuhkan ruang untuk naik dan turunnya. Jumlah ruang yang ditentukan oleh seberapa banyak yang akan Anda gunakan dalam card_view: cardElevation = "ndp".
Selamat Coding (:
sumber
Akhirnya saya bisa mendapatkan bayangan pada perangkat Lollipop dengan menambahkan margin ke tampilan kartu. Berikut adalah tata letak cardview terakhir:
sumber
8dp
cukup?Cukup tambahkan tag ini:
Jadi itu menjadi:
sumber
Anda dapat menambahkan baris kode ini untuk bayangan dalam tampilan kartu
Di bawah ini Anda memiliki contoh
Semoga ini membantu!
sumber
Anda dapat mencoba dengan menambahkan baris ini
Kode Utuh akan terlihat seperti ini
sumber
Dalam kasus saya, bayangan tidak muncul di perangkat Android L karena saya tidak menambahkan margin. Masalahnya adalah CardView membuat margin ini secara otomatis di <5 perangkat jadi sekarang saya melakukannya seperti ini:
sumber
Tambahkan android: hardwareAccelerated = "true" di file manifes Anda seperti di bawah ini
sumber
Pertama-tama pastikan bahwa dependensi berikut ditambahkan dan dikompilasi dengan benar dalam file build.gradle
dan setelah ini coba kode berikut:
Masalah muncul di Android L karena atribut layout_margin tidak ditambahkan
sumber
Recyclerview saya lambat dalam memuat jadi dengan membaca stackoverflow.com saya mengubah hardwareAccelerated menjadi "false" maka elevasi tidak muncul di perangkat. Saya berubah kembali menjadi true. Ini berhasil untuk saya.
sumber
Tampilan kartu tidak dapat menampilkan bayangan karena Anda
RelativeLayout
berada di bayangan tampilan kartu. Untuk memperlihatkan bayangan tambahkan margin pada tampilan Kartu Anda. Sebagai contoh:sumber
Saya pikir jika Anda memeriksa manifes Anda terlebih dahulu jika Anda menulis
android:hardwareAccelerated="false"
Anda harus membuatnyatrue
memiliki bayangan untuk kartu Seperti jawaban ini di sinisumber
Pastikan Anda tidak menggunakan
android:layerType="software"
di RecyclerView Anda .Mengubahnya untuk
android:layerType="hardware"
memecahkan masalah bagi saya.sumber
pindahkan atribut "using-sdk" Anda di atas manifes seperti jawaban di bawah ini https://stackoverflow.com/a/27658827/1394139
sumber