CardView中不必要的填充?

我已经在我的应用程序中实现了CardView,一切工作正常,除了有一个周围的图像填充,如果我把半径的卡。

看起来像这样: screenshot_2014-12-27-20-31-55

但在android文档和本文中 ,图像占用了整个cardview,所以你能帮我实现这一点。

我的布局文件是这样的:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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:orientation="vertical" android:padding="8dp"> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="200dp" card_view:cardBackgroundColor="@android:color/white" card_view:cardCornerRadius="4dp"> <ImageView android:id="@+id/media_image_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop"/> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:alpha="0.8" android:background="?attr/colorPrimary" android:padding="4dp"> <TextView android:id="@+id/media_download" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:textSize="11sp"/> <TextView android:id="@+id/category_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:textColor="@color/primary_text" android:textSize="12sp"/> </RelativeLayout> </android.support.v7.widget.CardView> </LinearLayout> 

注意:屏幕截图是在棒棒糖设备上捕获的。

Solutions Collecting From Web of "CardView中不必要的填充?"

我再次浏览了开发者文档 ,发现:

在API 20和之前,CardView不会裁剪圆angular的卡边界。 相反,它将填充添加到内容,以便它不会与圆angular重叠。

因此,对于棒棒糖设备,我必须调用setPreventCornerOverlap (false); 在cardview上。

更新:同样可以通过在卡片视图中添加app:cardPreventCornerOverlap="false"通过xml代码完成。

设置app:cardPreventCornerOverlap="false"将解决问题,但也删除所有的前棒棒糖设备的angular落。 如果您想在所有设备上使用圆angular,请手动添加:

card_view_round_corner_background.xml

  <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="@color/transparent"/> <stroke android:width="2dp" android:color="@color/Black"/> </shape> </item> <item> <shape android:shape="rectangle"> <solid android:color="@color/transparent"/> <corners android:radius="6dp"/> <stroke android:width="2dp" android:color="@color/Black"/> </shape> </item> </layer-list> 

在cardview中

  <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="true" android:clickable="true" android:foreground="?android:attr/selectableItemBackground"card_view:cardCornerRadius="@dimen/conner_radius" card_view:cardBackgroundColor="@color/Black" card_view:cardElevation="@dimen/z_card"> <!-- Put your card contain here --> <View android:background="@drawable/card_view_round_corner_border" android:layout_width="match_parent" android:layout_height="match_parent" /> 

但是这个解决scheme只适用于黑色或白色等纯色背景。

只要使用FrameLayout而不是LinearLayout,它就可以工作

 <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="-4dp"> <android.support.v7.widget.CardView android:id="@+id/card_view" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="100dp" android:layout_gravity="center" android:layout_margin="5dp" card_view:cardCornerRadius="4dp" card_view:cardPreventCornerOverlap="false" card_view:cardUseCompatPadding="true" > <FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <ImageView android:id="@+id/imageView" android:tag="image_tag" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_margin="5dp" android:layout_weight="1" android:src="@drawable/ic_launcher"/> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:layout_weight="2" android:orientation="vertical" > <TextView android:id="@+id/textViewName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:text="Android Name" android:textAppearance="?android:attr/textAppearanceLarge"/> <TextView android:id="@+id/textViewVersion" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginTop="5dp" android:text="Android Version" android:textAppearance="?android:attr/textAppearanceMedium"/> </LinearLayout> </FrameLayout> </android.support.v7.widget.CardView> </FrameLayout>