Установка высоты в XML на AppCompat CardView на Android 5.0

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

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

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

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

4 ответов


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


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

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

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

android:hardwareAccelerated="false"

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

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

android:hardwareAccelerated="true"

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


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

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