Поиск…


Вступление

FrameLayout с закругленным фоном угла и тенью.

CardView использует свойство высоты на Lollipop для теней и возвращается к пользовательской эмулируемой теневой реализации на старых платформах.

Из-за дороговизны скругления округлых углов на платформах перед Lollipop CardView не обрезает своих детей, которые пересекаются с закругленными углами. Вместо этого он добавляет отступы, чтобы избежать такого пересечения (см. SetPreventCornerOverlap (boolean), чтобы изменить это поведение).

параметры

параметр подробности
cardBackgroundColor Цвет фона для CardView.
cardCornerRadius Угловой радиус для CardView.
cardElevation Высота для CardView.
cardMaxElevation Максимальная высота для CardView.
cardPreventCornerOverlap Добавьте дополнение к CardView на v20 и ранее, чтобы предотвратить пересечения между содержимым карты и закругленными углами.
cardUseCompatPadding Добавьте дополнение в API v21 +, чтобы иметь те же самые измерения с предыдущими версиями. Может быть логическим значением, таким как «true» или «false».
contentPadding Внутренняя прокладка между краями Карты и дочерними элементами CardView.
contentPaddingBottom Внутренняя прокладка между нижним краем Карты и дочерними элементами CardView.
contentPaddingLeft Внутренняя прокладка между левым краем Карты и дочерними элементами CardView.
contentPaddingRight Высота для CardView.
cardElevation Внутренняя прокладка между правым краем Карты и дочерними элементами CardView.
contentPaddingTop Внутренняя прокладка между верхним краем Карты и дочерними элементами CardView.

замечания

CardView использует реальную высоту и динамические тени на Lollipop (API 21) и выше. Однако, прежде чем Lollipop CardView вернется к реализации программной тени.

Если вы пытаетесь сделать ImageView CardView в округленные углы CardView , вы можете заметить, что он не выглядит корректным перед Lollipop (API 21). Чтобы исправить это, вы должны вызвать setPreventCornerOverlap(false) в CardView или добавить app:cardPreventCornerOverlap="false" в ваш макет.

Перед использованием CardView вам необходимо добавить зависимость библиотеки поддержки в файле build.gradle :

dependencies{
    compile 'com.android.support:cardview-v7:25.2.0'
}

Номер последней версии можно найти здесь

Официальная документация:

https://developer.android.com/reference/android/support/v7/widget/CardView.html https://developer.android.com/training/material/lists-cards.html

Начало работы с CardView

CardView является членом библиотеки поддержки Android и предоставляет макет для карт.

Чтобы добавить CardView в свой проект, добавьте следующую строку в ваши зависимости build.gradle .

compile 'com.android.support:cardview-v7:25.1.1'

Номер последней версии можно найти здесь

В своем макете вы можете добавить следующее, чтобы получить карту.

<android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <!-- one child layout containing other layouts or views -->     

</android.support.v7.widget.CardView>

Затем вы можете добавить другие макеты внутри, и они будут включены в карту.

Кроме того, CardView может быть заполнен любым элементом пользовательского интерфейса и управляться из кода .

<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/card_view"
    android:layout_margin="5dp"
    card_view:cardBackgroundColor="#81C784"
    card_view:cardCornerRadius="12dp"
    card_view:cardElevation="3dp"
    card_view:contentPadding="4dp" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="16dp" >

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:id="@+id/item_image"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginRight="16dp"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/item_title"
            android:layout_toRightOf="@+id/item_image"
            android:layout_alignParentTop="true"
            android:textSize="30sp"
            />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/item_detail"
            android:layout_toRightOf="@+id/item_image"
            android:layout_below="@+id/item_title"
            />

    </RelativeLayout>
</android.support.v7.widget.CardView>

Настройка CardView

CardView обеспечивает высоту по умолчанию и угловой радиус, так что карты имеют согласованный внешний вид на платформах.

Вы можете настроить эти значения по умолчанию, используя эти атрибуты в файле xml:

  1. card_view:cardElevation атрибут card_view:cardElevation добавляет отметку в CardView.
  2. card_view:cardBackgroundColor атрибут card_view:cardBackgroundColor используется для настройки цвета фона фона CardView (вы можете дать любой цвет).
  3. card_view:cardCornerRadius атрибут card_view:cardCornerRadius используется для кривой 4 ребер CardView
  4. card_view:contentPadding атрибут card_view:contentPadding добавляет отступы между карточкой и card_view:contentPadding элементами карты

Примечание. Card_view - это пространство имен, определенное в верхнем представлении макета родителя. xmlns: card_view = " http://schemas.android.com/apk/res-auto "

Вот пример:

<android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        card_view:cardElevation="4dp"
        card_view:cardBackgroundColor="@android:color/white"
        card_view:cardCornerRadius="8dp"
        card_view:contentPadding="16dp">

        <!-- one child layout containing other layouts or views -->     

</android.support.v7.widget.CardView>

Вы также можете делать это программно, используя:

card.setCardBackgroundColor(....);
card.setCardElevation(...);
card.setRadius(....);
card.setContentPadding();

Проверьте официальный javadoc на наличие дополнительных свойств.

Добавление анимации Ripple

Чтобы включить анимацию пульсации в CardView, добавьте следующие атрибуты:

<android.support.v7.widget.CardView
  ...
  android:clickable="true"
  android:foreground="?android:attr/selectableItemBackground">
  ...
</android.support.v7.widget.CardView>

Использование изображений в качестве фона в CardView (проблемы с устройством перед Lollipop)

При использовании Image / Color в качестве фона в CardView вы можете получить небольшие белые прокладки (если по умолчанию цвет карты белый) по краям. Это происходит из-за закругленных углов по умолчанию в окне карты. Вот как избежать этих полей в устройствах с предварительным лечением.

Нам нужно использовать атрибут card_view:cardPreventCornerOverlap="false" в CardView. 1). В XML используйте следующий фрагмент.

<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    card_view:cardPreventCornerOverlap="false"
    android:layout_height="wrap_content"> 
      <ImageView
            android:id="@+id/row_wallet_redeem_img"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:scaleType="centerCrop"
            android:src="@drawable/bg_image" />

</android.support.v7.widget.CardView>
  1. В Java, как этот cardView.setPreventCornerOverlap(false) .

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

1 карта с фоном изображения в API 21 (отлично) Карточка с фоном изображения в API 21

2 Карточка с фоном изображения в API 19 без атрибута (обратите внимание на прокладки вокруг изображения) Карточка с фоном изображения в API 19 без атрибута

3 FIXED Card с фоном изображения в API 19 с атрибутом cardView.setPreventCornerOverlap(false) (проблема теперь исправлена) Исправленная карта с фоном изображения в API 19 с атрибутом

Также читайте об этом на Документации здесь
Оригинальный пост SOF здесь

Цвет фона Animate CardView с TransitionDrawable

public void setCardColorTran(CardView card) {
    ColorDrawable[] color = {new ColorDrawable(Color.BLUE), new ColorDrawable(Color.RED)};
    TransitionDrawable trans = new TransitionDrawable(color);
    if(Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
        card.setBackground(trans);
    } else {
        card.setBackgroundDrawable(trans);
    }
    trans.startTransition(5000);
}


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow