Android
CardView
Поиск…
Вступление
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:
-
card_view:cardElevation
атрибутcard_view:cardElevation
добавляет отметку в CardView. -
card_view:cardBackgroundColor
атрибутcard_view:cardBackgroundColor
используется для настройки цвета фона фона CardView (вы можете дать любой цвет). -
card_view:cardCornerRadius
атрибутcard_view:cardCornerRadius
используется для кривой 4 ребер CardView -
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>
- В Java, как этот
cardView.setPreventCornerOverlap(false)
.
При этом удаляется нежелательное дополнение на краях карты. Вот некоторые визуальные примеры, связанные с этой реализацией.
1 карта с фоном изображения в API 21 (отлично)
2 Карточка с фоном изображения в API 19 без атрибута (обратите внимание на прокладки вокруг изображения)
3 FIXED Card с фоном изображения в API 19 с атрибутом cardView.setPreventCornerOverlap(false)
(проблема теперь исправлена)
Также читайте об этом на Документации здесь
Оригинальный пост 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);
}