Android 5.0'da AppCompat CardView'da XML'de Yüksekliği Ayarlama


95

Anladığım kadarıyla, önizleme aşamasının başlarında, yalnızca CardViewJava'da bir hack olmadan XML'de yükseltme ayarlamanın bir yolu yok gibi görünüyordu . Şimdi resmi sürüm çıktı, bunu, yüksekliği ayarlamak için Java kodu yazmadan XML'de yapmanın bir yolu var mı?

card_view:cardElevationHiçbir etki yapmamaya çalıştım . 5.0 için emülatörleri kullanırken her şeyin yolunda olduğunu düşünmüştüm. Ama şimdi gerçek cihazımda resmi sürümü kullandığıma göre, tüm CardViewe-postalarım kayboldu

Lolipop öncesi, harika çalışıyor.

İşte tam xml'im

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:id="@+id/cv1"
    card_view:cardElevation="4dp"
    android:layout_margin="6dp"
    card_view:cardCornerRadius="3dp"
    android:layout_height="match_parent">

Sorunun arkasına geçtim ama henüz bir cevabım yok. Lolipop'a yükselttiğimde, kenar boşlukları veya dolgu bir şekilde kayboldu, böylece kartın köşelerini veya kenarlarını görmüyorlar, böylece tamamen düz kalıyor.
TheLettuceMaster

Yanıtlar:


317

Bir kenar boşluğu / dolgu sorununa benziyor, cardUseCompatPadding özniteliğini true olarak ayarlamayı deneyin . Örneğin:

<android.support.v7.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="6dp"
    card_view:cardUseCompatPadding="true"
    card_view:cardElevation="4dp"
    card_view:cardCornerRadius="3dp">

Android dokümanından açıklama:

CardView, L'den önce platformlara gölge çizmek için ek dolgu ekler.

Bu, Kartların L ve L öncesi arasında farklı boyutlara sahip olmasına neden olabilir. CardView'ı diğer Görünümlerle hizalamanız gerekirse, değişiklikleri hesaba katmak için api sürümüne özel boyut kaynaklarına ihtiyacınız olabilir. Alternatif olarak, cardUseCompatPadding bayrağını true olarak ayarlayabilirsiniz ve CardView, L platformlarında ve sonrasında aynı dolgu değerlerini ekler.

CardUseCompatPadding bayrağının true olarak ayarlanması, kullanıcı arabiriminde gereksiz boşluklar eklediğinden, varsayılan değer false'tur.


1
card_view: cardUseCompatPadding = "true" yükseltmeyi çalıştırdı ama bir sürü dolgu da ekledi ....
Taylor,

1
cardElevation'ın varsayılan değeri nedir?
android geliştiricisi

13

Bu çizgiye sahipsen

android:hardwareAccelerated="false"

manifest uygulama etiketinde gölgeleriniz görüntülenmedi. bu çizgiyi kaldırmayı dene

ya da kullan

android:hardwareAccelerated="true"

Bu benim için çalıştı! Umarım senin için de çalışır :)


Evet! sorun buydu !! çok teşekkür ederim! ancak arka plan için kullandığım bitmap görüntüsü nedeniyle değil, uygulama
yavaşlıyor

13

cardElevationÖzniteliği kullanmalısınız .
Androidx kitaplıkları:

Sen kullanabilirsiniz MaterialCardresmi dahil Malzeme Bileşenleri kütüphanesinde :

implementation 'com.google.android.material:material:1.x.x'

Ve düzeninizde:

    <com.google.android.material.card.MaterialCardView
        app:cardElevation="xxdp"
        app:cardUseCompatPadding="true"
        ..>

Veya CardViewandroidx paketlerinde:

implementation 'androidx.cardview:cardview:1.x.x'

Ve düzeninizde:

     <androidx.cardview.widget.CardView
        app:cardElevation="xxdp"
        app:cardUseCompatPadding="true"
        ..>

ESKİ destek kitaplığı :

<android.support.v7.widget.CardView
    app:cardElevation="xxdp" 
    app:cardUseCompatPadding="true"
    ..>

1
Hayır tekrar denedim ve bu işe yaramadı. Tam xml'mi yukarıya ekledim.
TheLettuceMaster

Benim için çalışıyor. Varsayılan yükseklik nedir?
SMBiggs

Yükseklik Kart dinlenme yüksekliği: 2dp Kart yükseltilmiş yükseklik: 8dp Kartların varsayılan yüksekliği 2dp'dir. Masaüstünde, kartlar 0dp'lik bir dinlenme yüksekliğine sahip olabilir ve üzerine gelindiğinde 8dp'lik bir yükseklik elde edebilir. Gönderen google.com/design/spec/components/...
ZimaXXX

kullanımdan kaldırıldı
Makarand

1
@Makarand True Tasarım kütüphanesi artık korunmuyor ama bu soruyu 5 yıl önce cevapladım. Her durumda, cevabı andriodx detayları ile güncelledim.
Gabriele Mariotti

1

Ekleyerek çözdü beni

xmlns: card_view = "http://schemas.android.com/apk/res-auto"

Örneğin:

<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    card_view:cardCornerRadius="5dp">

0

Kart görünümüne bir uygulama: cardElevation = "8dp" özelliği ekliyorum, bu nedenle şöyle olacak:

<android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="160dp"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        app:cardElevation="8dp"
        app:cardCornerRadius="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scaleType="centerCrop"
            android:src="@drawable/kmp_warna1" />

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

Umarım yardımcı olur

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.