Почему между CardViews на Lollipop нет места?

Я пытаюсь использовать CardView и он работает намного ниже 5.0, но выглядит странно на Lollipop.

Введите описание изображения здесь

Введите описание изображения здесь

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin"> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="200dp"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="card1" android:textAppearance="?android:attr/textAppearanceLarge" /> </android.support.v7.widget.CardView> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="200dp"> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="card2" android:textAppearance="?android:attr/textAppearanceLarge" /> </android.support.v7.widget.CardView> </LinearLayout> 

Я встречаю тот же вопрос, когда я использую RecyclerView , должен ли я что-то добавить, если он работает на Lollipop?

Solutions Collecting From Web of "Почему между CardViews на Lollipop нет места?"

Установите это на CardView :

 app:cardUseCompatPadding="true" 

Из документации:

Добавьте дополнение в API v21 +, чтобы иметь те же самые измерения с предыдущими версиями.

Используйте эти два тега ниже внутри вашего карточного окна:

 app:cardPreventCornerOverlap="false" app:cardUseCompatPadding="true" 

Первое изображение – ожидаемое поведение вида карты. Когда карта имеет возвышение, тень падает на нижние слои. В устройствах с передним лепестком высота выполняется путем добавления прокладки. Поэтому устройства с предварительным лепестком будут иметь прокладку вокруг вида карты.

До L CardView добавляет дополнение к своему контенту и рисует тени в этой области. Это количество дополнений равно maxCardElevation + (1 – cos45) * cornerRadius по бокам и maxCardElevation * 1.5 + (1 – cos45) * cornerRadius сверху и снизу.

Вы должны добавить app:cardUseCompatPadding="true" в свой Cardview . Но просто добавление, которое может дать вам ошибку. Чтобы избежать этой ошибки, вам также нужно добавить xmlns:app="http://schemas.android.com/apk/res-auto" в свой CardView .

Например,

 <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_height="wrap_content" android:layout_width="match_parent" app:cardUseCompatPadding="true"> // Other views here </android.support.v7.widget.CardView> 

Некоторые добавили бы card_view:cardUseCompatPadding="true" и xmlns:card_view="http://schemas.android.com/apk/res-auto" вместо упомянутых выше. Оба пути правильны.

Если вы хотите узнать больше о приложении в XML (Android), пройдите этот ответ :

Хотя предыдущие ответы разрешают проблему, они не объясняют, что делает каждый атрибут. Чтобы быть более полезными, чтобы ответить искателям,

cardPreventCornerOverlap добавляет дополнение к CardView на v20 и ранее, чтобы предотвратить пересечения между содержимым карты и закругленными углами.

cardUseCompatPadding добавляет дополнение в API v21 +, чтобы иметь те же самые измерения с предыдущими версиями.