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

Насколько я понимаю, на ранней стадии предварительного просмотра, казалось, не было возможности установить высоту в XML только для CardViews без взлома в 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">

person TheLettuceMaster    schedule 18.11.2014    source источник
comment
Я разобрался с проблемой, но ответа пока нет. Когда я перешел на леденец, каким-то образом поля или отступы исчезли, поэтому они не видят ни углов, ни краев карты, поэтому она совершенно плоская.   -  person TheLettuceMaster    schedule 22.11.2014


Ответы (6)


Похоже на проблему с полями/заполнением, попробуйте установить 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:

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

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

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

person Gaëtan Maisse    schedule 25.11.2014
comment
card_view:cardUseCompatPadding=true заставило работать повышение, но также добавило кучу отступов.... - person Taylor; 13.05.2019
comment
каково значение по умолчанию для cardElevation? - person android developer; 27.06.2019

Если у вас есть эта линия

android:hardwareAccelerated="false"

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

или использовать

android:hardwareAccelerated="true"

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

person Matin Ashtiani    schedule 09.04.2017
comment
Да! это была проблема!! большое спасибо! но не из-за растрового изображения, которое я использовал для фона, приложение замедляется :( - person Kaushal28; 29.05.2017

Вы должны использовать cardElevation.
Библиотеки Androidx:

Вы можете использовать MaterialCard включены в официальную библиотеку компонентов материалов:

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

И в вашем макете:

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

Или CardView в пакетах androidx:

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

И в вашем макете:

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

СТАРАЯ библиотека поддержки:

<android.support.v7.widget.CardView
    app:cardElevation="xxdp" 
    app:cardUseCompatPadding="true"
    ..>
person Gabriele Mariotti    schedule 19.11.2014
comment
Нет, я попробовал еще раз, и это не сработало. Я добавил свой полный xml вверху. - person TheLettuceMaster; 19.11.2014
comment
Работает на меня. Какая высота по умолчанию? - person SMBiggs; 21.01.2016
comment
Elevation Высота покоя карты: 2dp Высота поднятой карты: 8dp Карты имеют высоту по умолчанию 2dp. На рабочем столе карты могут иметь высоту покоя 0 dp и подниматься на 8 dp при наведении. С google.com/design/spec/components/< /а> - person ZimaXXX; 16.02.2016
comment
это устарело - person Makarand; 14.12.2019
comment
@Makarand Правда. Библиотека дизайна больше не поддерживается, но я ответил на этот вопрос 5 лет назад. В любом случае я обновил ответ подробностями andriodx. - person Gabriele Mariotti; 14.12.2019

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

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">
person felhi    schedule 13.01.2018

я добавляю атрибут 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>

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

person Cevin Ways    schedule 21.04.2019

установить в карточке

    <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">
person sepnil    schedule 21.03.2021