Встановлення висоти в XML на AppCompat CardView на Android 5.0


95

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

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

Попередньо льодяник, він чудово працює.

Ось мій повний 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

Відповіді:


316

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


1
card_view: cardUseCompatPadding = "true" отримав висоту для роботи, але також додав купу заповнення ....
Тейлор,

1
яке значення за замовчуванням має cardElevation?
розробник android

13

Якщо у вас є цей рядок

android:hardwareAccelerated="false"

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

або використовувати

android:hardwareAccelerated="true"

Це працювало для мене! Сподіваюся, це працює і у вас :)


так! в цьому була проблема !! Дуже дякую! але не через растрове зображення, яке я використовував для фону, додаток сповільнюється :(
Kaushal28,

13

Ви повинні використовувати 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"
    ..>

1
Ні, я спробував ще раз, і це не спрацювало. Я додав повний xml вгорі.
TheLettuceMaster

Працює для мене. Яка висота за замовчуванням?
SMBiggs

Картка висоти відпочиває висота: 2 дп. Піднята карта висоти: 8 дп. Карти мають типову висоту 2 дп. На робочому столі картки можуть мати висоту спокою 0dp і підняти висоту 8dp при наведенні. З google.com/design/spec/components/…
ZimaXXX

це застаріло
Макаранд

1
@Makarand True. Бібліотека дизайну більше не підтримується, але я відповів на це запитання 5 років тому. У будь-якому випадку я оновив відповідь деталями andriodx.
Габріеле Маріотті

1

Це вирішило мене додаванням

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

0

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

Сподіваюся, це допоможе

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.