使用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):
三星Galaxy S4(4.4.2):
似乎Nexus上的那个用它的边缘计算视图,然后在外面绘制阴影。另一方面,三星之一似乎应用了边距,然后在内部绘制阴影,直到达到计算出的视图范围。
我错过了什么吗?
答案 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 将是相同的。