Настройка высоты в XML на AppCompat CardView на Android 5.0

Из того, что я понимаю, на раннем этапе предварительного просмотра казалось невозможным установить высоту в XML только на CardView без взлома в Java. Теперь, когда официальная версия отсутствует, есть ли способ сделать это в XML без написания кода Java для установки высоты?

Я не пробовал card_view:cardElevation. Я думал, когда я использовал эмуляторы для 5.0, все было в порядке. Но теперь, когда я использую официальную версию на моем самом устройстве, все мои CardView исчезли

Pre Lollipop, он отлично работает.

Вот мой полный 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">

Ответ 1

Похоже на проблему с полями/дополнением, попробуйте установить атрибут cardUseCompatPadding в значение true. Например:.

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

CardView добавляет дополнительное дополнение для рисования теней на платформах до Л.

Это может привести к тому, что карты будут иметь разные размеры между L и до L. Если вам нужно выровнять CardView с другими видами, вам может понадобиться api для конкретных изменений для конкретных изменений. Как альтернативой, вы можете установить флаг cardUseCompatPadding в true, и CardView добавит те же значения заполнения на платформах L и после.

Поскольку установка флага cardUseCompatPadding в true добавляет ненужные пробелы в пользовательском интерфейсе, значение по умолчанию равно false.

Ответ 2

Вы должны использовать атрибут cardElevation

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    card_view:cardElevation="4dp" />

Ответ 3

Если у вас есть эта строка

android:hardwareAccelerated="false"

в теге приложения манифеста ваши тени не отображались. попробуйте удалить эту строку

или используйте

android:hardwareAccelerated="true"

Это сработало для меня! Я надеюсь, что это сработает и для вас:)

Ответ 4

Это решило меня, добавив

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

например:

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

Ответ 5

я добавляю атрибут app: cardElevation = "8dp" в представлении карты, поэтому он будет выглядеть так:

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

Надеюсь, это поможет