Чому між CardViews на Lollipop немає місця?


79

Я намагаюся використовувати, 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, чи потрібно мені щось додавати, якщо воно працює на льодянику?


1
додайте LinearLayoutміж картками
Андрес Карденас

Відповіді:


205

Встановіть це на CardView:

app:cardUseCompatPadding="true"

З документації:

Також додайте відступ в API v21 +, щоб мати однакові виміри з попередніми версіями.


1
Натомість я використав простір імен "app". Чи все ще використовується "card_view"?
wsgeorge

1
@wsgeorge, що було з документації Android, але я відредагував його до більш зручного простору імен додатків.
tomrozb

виглядає краще, але як видалити роздільну лінію?
немає новин

@nonews Можна спробувати android:divider="@null".
SREE


13

перше зображення - це очікувана поведінка перегляду картки. коли карта має висоту, тінь падає на нижні шари. У пристроях перед льодяником піднесення здійснюється шляхом додавання прокладки. отже, пристрої перед льодяниками матимуть відступ навколо подання картки.

Перед символом L CardView додає відступ до свого вмісту і малює тіні в цій області. Ця сума заповнення дорівнює maxCardElevation + (1 - cos45) * cornerRadius з боків та maxCardElevation * 1.5 + (1 - cos45) * cornerRadius зверху та знизу.


отже, розмір перегляду картки, який ми бачимо в редакторі, не є реальним розміром, який ми можемо використовувати, коли нижче льодяника, є його частина, яка використовується для додавання прокладки, а на льодянику розмір у макеті такий же, як реальний, це здається, що набивка цього виглядає краще , але як я повинен робити, щоб розділити їх?
cajsaiko

те, що ви побачили в редакторі, це те, що ви отримуєте в реальності. Щоб мати однаковий запас між картками на всіх екранах. Встановити маржу, якщо важіль API 21 або вище
нульовий вказівник

5
Ця відповідь правильна. На додаток до цього, якщо ви хочете зробити інтерфейс послідовним без додавання окремих полів для значень-21, ви можете встановити compat padding на true, щоб він також додав те саме padding в L. developer.android.com/reference/android/support/v7/widget/…
yigit

@billgates після додавання поля, перегляд картки добре виглядає як на лоллоп, так і перед лоллоп, дякую за вашу відповідь!
cajsaiko

1
чи можна зняти прокладку на пристроях, що роблять льодяник?
user2456977

5

Ви повинні додати 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 attribute також додає відступ в API v21 +, щоб мати однакові виміри з попередніми версіями.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.