Android支持库的CardView在不同设备上的不同结果

时间:2015-01-26 15:59:52

标签: android android-layout android-support-library android-cardview

使用Android Support Library v7小部件CardView我在Galaxy S4上看到与Nexus 4设备相比的不同结果。具有以下布局:

<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:id="@+id/card_view"
    android:layout_width="fill_parent"
    android:layout_height="150dp"
    android:layout_gravity="center"
    android:layout_marginTop="8dp"
    android:layout_marginBottom="10dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:orientation="horizontal"
    card_view:cardCornerRadius="7dp"
    card_view:cardElevation="12dp">

    <ScrollView
        android:id="@+id/scrollView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_centerVertical="true">

        <TextView
            android:id="@+id/txtExample"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/no_messages" />

    </ScrollView>

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

我得到了这些结果:

Nexus 4(5.0.1): enter image description here

三星Galaxy S4(4.4.2): enter image description here

似乎Nexus上的那个用它的边缘计算视图,然后在外面绘制阴影。另一方面,三星之一似乎应用了边距,然后在内部绘制阴影,直到达到计算出的视图范围。

我错过了什么吗?

1 个答案:

答案 0 :(得分:8)

你所有的观察都是正确的:)
一切都在官方documentation of CardView上解释得很好:

  

在L之前,CardView会在其内容中添加填充并绘制阴影   那个地区。此填充量等于maxCardElevation +(1 -   cos45)*两侧的cornerRadius和maxCardElevation * 1.5 +(1 -   cos45)* cornerRadius在顶部和底部。

  

请注意,如果您为CardView指定了确切的尺寸,因为   对于阴影,其内容区域将在平台之间不同   在L之前和之后L.通过使用api版本特定的资源值,   你可以避免这些变化。或者,如果你想要CardView   在平台L和之后添加内部填充,您可以设置   setUseCompatPadding(boolean)为true。

如上所述 - 您应该只使用setUseCompatPadding (true)然后使用外部填充: L pre-L 将是相同的。