Ustawianie podniesienia uprawnień w XML w AppCompat CardView w systemie Android 5.0

95

Z tego, co rozumiem, na wczesnym etapie podglądu wydawało się, że nie ma sposobu na ustawienie podniesienia uprawnień w XML tylko na CardViews bez hackowania w Javie. Teraz, gdy oficjalna wersja została wydana, czy można to zrobić w XML bez pisania kodu Java w celu ustawienia podniesienia uprawnień?

Próbowałem card_view:cardElevationbez skutku. Kiedy używałem emulatorów w wersji 5.0, myślałem, że wszystko jest w porządku. Ale teraz, gdy używam oficjalnej wersji na moim rzeczywistym urządzeniu, wszystkie moje CardViewzniknęły

Pre Lollipop działa świetnie.

Oto mój pełny plik XML

<?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">
TheLettuceMaster
źródło
Mam za sobą problem, ale nie mam jeszcze odpowiedzi. Kiedy zaktualizowałem do Lollipopa, w jakiś sposób marginesy lub wypełnienie zniknęły, więc nie widzą rogów ani krawędzi karty, więc jest całkowicie płaska.
TheLettuceMaster

Odpowiedzi:

316

Wygląda na to, że występuje problem z marginesami / wypełnieniem, spróbuj ustawić atrybut cardUseCompatPadding na wartość true. Na przykład:

<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">

Wyjaśnienie z dokumentu na Androida:

CardView dodaje dodatkowe wypełnienie, aby rysować cienie na platformach przed L.

Może to spowodować, że karty będą miały różne rozmiary od L do L. Jeśli chcesz wyrównać CardView z innymi widokami, możesz potrzebować zasobów wymiaru specyficznych dla wersji interfejsu API, aby uwzględnić zmiany. Alternatywnie możesz ustawić flagę cardUseCompatPadding na true, a CardView doda te same wartości wypełnienia na platformach L i później.

Ponieważ ustawienie flagi cardUseCompatPadding na true powoduje dodanie niepotrzebnych luk w interfejsie użytkownika, wartość domyślna to false.

Gaëtan Maisse
źródło
1
card_view: cardUseCompatPadding = "true" dostałem podniesienie do pracy, ale dodałem też trochę wypełnienia ...
Taylor
1
jaka jest domyślna wartość cardElevation?
programista Androida
13

Jeśli masz tę linię

android:hardwareAccelerated="false"

w tagu manifestu aplikacji Twoje cienie nie były wyświetlane. spróbuj usunąć tę linię

albo użyj

android:hardwareAccelerated="true"

To zadziałało dla mnie! Mam nadzieję, że u Ciebie też działa :)

Matin Ashtiani
źródło
Tak! to był problem !! Dziękuję bardzo! ale nie z powodu obrazu bitmapowego, którego użyłem jako tła, aplikacja zostaje spowolniona :(
Kaushal28
13

Musisz użyć cardElevationatrybutu.
Biblioteki Androidx:

Możesz użyć MaterialCarddołączonych do oficjalnej biblioteki komponentów materiałów :

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

A w swoim układzie:

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

Lub CardVieww pakietach androidx:

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

A w swoim układzie:

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

Biblioteka wsparcia OLD :

<android.support.v7.widget.CardView
    app:cardElevation="xxdp" 
    app:cardUseCompatPadding="true"
    ..>
Gabriele Mariotti
źródło
1
Nie, spróbowałem ponownie i to nie pomogło. Dodałem mój pełny XML do góry.
TheLettuceMaster
Pracuje dla mnie. Jaka jest domyślna wysokość?
SMBiggs
Wysokość spoczynku karty podniesienia: 2 dp Podniesienie karty: 8 dp Karty mają domyślną wysokość 2 dp. Na komputerach stacjonarnych karty mogą mieć wartość spoczynkową 0dp i uzyskać podniesienie 8dp po najechaniu kursorem. Z google.com/design/spec/components/…
ZimaXXX
jest przestarzały
Makarand
1
@Makarand True Biblioteka projektów nie jest już utrzymywana, ale odpowiedziałem na to pytanie 5 lat temu. W każdym razie zaktualizowałem odpowiedź o szczegóły dotyczące andriodx.
Gabriele Mariotti,
1

To rozwiązało mnie, dodając

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

na przykład:

<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">
felhi
źródło
0

dodaję aplikację: cardElevation = atrybut "8dp" w widoku karty, więc będzie to wyglądać następująco:

<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>

Mam nadzieję, że to pomoże

Cevin Ways
źródło