Ненужное заполнение в CardView?
Я внедрил CardView в свое приложение, и все работает отлично, за исключением того, что вокруг изображения будет небольшое дополнение, если я поместил радиус в карту.
Это выглядит так:
![screenshot_2014-12-27-20-31-55]()
Но в андроидных документах и в этой статье изображение занимает весь вид карты, поэтому вы можете помочь я этого добиваюсь.
Мой файл макета похож:
<?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>
ПРИМЕЧАНИЕ. Снимок экрана снят на устройстве с предварительным лепестком.
Ответы
Ответ 1
Я снова просмотрел документы разработчика и обнаружил, что:
В API 20 и ранее CardView не обрезает границы Карты для закругленных углов. Вместо этого он добавляет дополнение к контенту, чтобы он не перекрывался с закругленными углами.
Итак, для устройств с предварительным лепестком я должен вызвать setPreventCornerOverlap (false);
в кард-карте.
Обновление: То же самое можно сделать с помощью xml-кода, добавив app:cardPreventCornerOverlap="false"
в виде карты.
Ответ 2
Настройка app:cardPreventCornerOverlap="false"
решит проблему, но также удалит все предустановленные устройства. Если вам нужен круглый угол на всех устройствах, добавьте его вручную:
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>
В кард-карте
<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"
/>
Но это решение работает только на твердом фоне, таком как черный или белый.
Ответ 3
Просто используйте 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>