在Android 5.0的AppCompat CardView上以XML设置高程


95

据我了解,在预览阶段的早期,似乎没有办法仅在CardView没有Java黑客的情况下在XML上设置高程。现在正式发布了,有什么方法可以用XML做到这一点而无需编写Java代码来设置海拔高度?

我尝试card_view:cardElevation没有任何效果。我曾想过,当我将模拟器用于5.0时,一切都很好。但是现在我在实际设备上使用的是正式版本,我所有的CardViews都消失了

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

我已经解决了这个问题,但是还没有答案。当我升级为棒棒糖时,其边缘或填充物以某种方式消失了,因此他们看不到卡的角或边缘,因此完全平坦。
TheLettuceMaster 2014年

Answers:


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之前的平台上绘制阴影。

这可能会导致Card在L和L之前之间具有不同的大小。如果需要将CardView与其他视图对齐,则可能需要特定于api版本的维度资源来说明更改。另外,您可以将cardUseCompatPadding标志设置为true,并且CardView将在平台L及其之后添加相同的填充值。

由于将cardUseCompatPadding标志设置为true会在UI中添加不必要的间隙,因此默认值为false。


1
card_view:cardUseCompatPadding =“ true”使高程起作用,但也添加了一堆填充....
泰勒

1
cardElevation的默认值是多少?
Android开发人员

13

如果你有这条线

android:hardwareAccelerated="false"

在清单应用程序标记中,未显示阴影。尝试删除此行

或使用

android:hardwareAccelerated="true"

这对我有用!我希望它也对您有用:)


是的 那就是问题!!非常感谢!但不是由于我用于背景的位图图像,应用程序速度变慢了:(
Kaushal28 '17

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

CardViewandroidx包中的:

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

在您的布局中:

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

OLD支持库

<android.support.v7.widget.CardView
    app:cardElevation="xxdp" 
    app:cardUseCompatPadding="true"
    ..>

1
不,我再试一次,那没有用。我在顶部添加了完整的xml。
TheLettuceMaster 2014年

为我工作。默认高程是多少?
SMBiggs

高程卡静止高程:2dp卡高程升高:8dp卡的默认高程为2dp。在台式机上,卡的静止仰角可以为0dp,悬停时的仰角可以为8dp。从google.com/design/spec/components/...
ZimaXXX

不推荐使用
-Makarand

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>

希望对你有帮助

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.