卡片视图在Lollipop版本下无法正常工作

时间:2017-07-31 08:45:46

标签: java android android-cardview

我正在使用卡片视图,但高程和卡片视图属性在版本5.0以下不起作用。

我尝试使用card_view:cardUseCompatPadding =" true"通过搜索一些SO帖子,但这也没有用。

看起来应该是这样的

enter image description here

在4.2.2

上看起来像这样

enter image description here

这是布局:

IXmlSerializable

编辑:我创建了9个这样的补丁文件

enter image description here

但是这给出了这个错误:

 <android.support.v7.widget.CardView
    xmlns:app="http://schemas.android.com/tools"
    android:id="@+id/card_view"
    app:cardUseCompatPadding="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="05dp"
    android:layout_marginTop="05dp"
    card_view:cardElevation="12dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="@color/bg">

        <View
            android:layout_width="3dp"
            android:layout_height="match_parent"
            android:background="@color/cardLineColor"></View>

        <LinearLayout
            android:id="@+id/linearLayout6"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginEnd="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginStart="10dp"
            android:orientation="vertical">

            <TextView
                android:id="@+id/txt_id"
                android:layout_width="103dp"
                android:layout_height="wrap_content"
                android:text="ID"
                android:textColor="@color/white" />

            <TextView
                android:id="@+id/txt_date"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="05dp"
                android:text="23/3/2015"
                android:textColor="@color/textColor"
                android:textSize="10sp" />


        </LinearLayout>

        <TextView
            android:id="@+id/txt_trans_type"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignTop="@+id/linearLayout6"
            android:layout_centerHorizontal="true"
            android:text="sent money"
            android:textColor="@color/white"
            android:textStyle="bold" />

        <LinearLayout
            android:id="@+id/linearLayout8"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_alignTop="@+id/linearLayout6"
            android:layout_marginEnd="10dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginStart="10dp"
            android:layout_toEndOf="@+id/txt_trans_type"
            android:layout_toRightOf="@+id/txt_trans_type"
            android:orientation="vertical">

            <TextView
                android:id="@+id/txt_balance"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="end"
                android:text="$3214"
                android:textAlignment="viewEnd"
                android:textColor="@color/white"
                android:textStyle="bold" />

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="end"
                android:layout_marginTop="05dp"
                android:text="@string/balance"
                android:textAlignment="viewEnd"
                android:textColor="@color/white"
                android:textSize="10sp" />

        </LinearLayout>
    </RelativeLayout>

</android.support.v7.widget.CardView>

可能是它的高度宽度多少?我试过很小的高度但是它留下了一些空隙。如何将其与所有设备匹配?

2 个答案:

答案 0 :(得分:0)

可悲的是,正如您所提到的那样,提升不适用于API 19及更低版本。

我为类似问题选择的解决方案是通过常规布局替换我的cardviews并使用9-patch图像作为背景来生成阴影。它具有非常可调节的优点,而且,与高程属性不同,如果您不想要简单的黑色阴影,则可以进行更多自定义,如阴影颜色。

唯一的问题是您必须自己设计图像并将其添加到项目中。但不要害怕,有一些方便的生成器,如this one,可以为你生成它。只需确保设置的最小尺寸小于布局,以确保它适合而不会使其变形。我通常生成一个10 * 10像素宽的图像,即使应用到更大的视图,阴影也不会变形。

当您获得图像(名称应该类似于myimage.9.png)时,只需将其添加到您的drawable中,而不删除.9.png扩展名,然后将其设置为可绘制到布局的常规背景,通过xml或代码。而且你已经完成了!

编辑:没有注意到你在卡片顶部也有照明..如果你有类似Photoshop的东西你可以尝试的是,通过对暗色调应用阴影来创建自己的9补丁,然后创建第二个图层以添加另一个投影,但这次设置为白色并使用适当的角度在上面显示。然后将其保存为png并使用9-patch生成器将其转换为.9.png图像。

See the 9-patch documentation here.如果你正在使用Android Studio,那么还有一个用于9补丁的内置生成器。

可悲的是,在Material Design介入Android 5之前,用户界面对于像阴影这样的高级显示是有限的。也许您可以通过编程方式添加卡片视图,这样就可以做到这样的事情

if (android.os.Build.VERSION.SDK_INT <= android.os.Build.VERSION_CODES.LOLLIPOP){
    //Add regular layout to your views with 9 patch
} else{
    //Add cardview to get desired effect
}

这样,您的大多数用户都会拥有所需的卡片视图,但如果您需要使用可点击/可拖动的元素等,它可以快速增加您需要的代码量。

答案 1 :(得分:0)

使用app:cardElevation="12dp" 而不是card_view:cardElevation="12dp" 希望它有所帮助。