Suche…


Einführung

Ein FrameLayout mit abgerundeten Ecken und Schatten.

CardView verwendet auf Lollipop die Elevation-Eigenschaft für Schatten und greift auf eine benutzerdefinierte emulierte Schattenimplementierung auf älteren Plattformen zurück.

Aufgrund des kostenaufwändigen Clipping der abgerundeten Ecken auf Plattformen vor Lollipop schneidet CardView seine untergeordneten Elemente nicht mit abgerundeten Ecken ab. Stattdessen wird eine Auffüllung hinzugefügt, um eine solche Überschneidung zu vermeiden (siehe setPreventCornerOverlap (boolean), um dieses Verhalten zu ändern).

Parameter

Parameter Einzelheiten
cardBackgroundColor Hintergrundfarbe für CardView.
cardCornerRadius Eckenradius für CardView.
cardElevation Elevation für CardView.
cardMaxElevation Maximale Höhe für CardView.
cardPreventCornerOverlap Fügen Sie CardView in Version 20 und zuvor eine Auffüllung hinzu, um Schnittpunkte zwischen dem Karteninhalt und abgerundeten Ecken zu verhindern.
cardUseCompatPadding Fügen Sie in API v21 + auch das Auffüllen hinzu, um die gleichen Maße wie in früheren Versionen zu erhalten. Kann ein boolescher Wert sein, z. B. "true" oder "false".
contentPadding Innenpolsterung zwischen den Kartenrändern und den untergeordneten Elementen des CardView.
contentPaddingBottom Innenpolsterung zwischen der Unterkante der Karte und den Kindern des CardView.
contentPaddingLeft Innenpolsterung zwischen dem linken Rand der Karte und den untergeordneten Elementen des CardView.
contentPaddingRight Elevation für CardView.
cardElevation Innenpolsterung zwischen dem rechten Kartenrand und den Kindern des CardView.
contentPaddingTop Innenpolsterung zwischen oberem Kartenrand und untergeordneten Elementen des CardView.

Bemerkungen

CardView verwendet echte Höhen und dynamische Schatten auf Lollipop (API 21) und höher. Bevor jedoch Lollipop CardView auf eine programmatische Schattenimplementierung CardView .

Wenn Sie versuchen, eine ImageView in die abgerundeten Ecken einer CardView , werden Sie feststellen, dass sie vor dem Lollipop (API 21) nicht richtig aussieht. Um dies zu beheben, sollten Sie setPreventCornerOverlap(false) in CardView oder die app:cardPreventCornerOverlap="false" hinzufügen app:cardPreventCornerOverlap="false" zu Ihrem Layout.

Vor der Verwendung von CardView Sie die Abhängigkeit der Unterstützungsbibliothek in der Datei build.gradle :

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

Eine Nummer der neuesten Version finden Sie hier

Offizielle Dokumentation:

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

Erste Schritte mit CardView

CardView ist Mitglied der Android Support Library und bietet ein Layout für Karten.

CardView Sie zum Hinzufügen von CardView zu Ihrem Projekt die folgende Zeile zu Ihren build.gradle Abhängigkeiten hinzu.

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

Eine Nummer der neuesten Version finden Sie hier

In Ihrem Layout können Sie dann Folgendes hinzufügen, um eine Karte zu erhalten.

<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>

Sie können dann weitere Layouts hinzufügen, die in einer Karte enthalten sind.

CardView kann außerdem mit einem beliebigen UI-Element gefüllt und vom Code aus manipuliert werden .

<?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 anpassen

CardView bietet eine Standardhöhe und einen Eckenradius, damit die Karten auf allen Plattformen einheitlich aussehen.

Sie können diese Standardwerte mithilfe der folgenden Attribute in der XML-Datei anpassen:

  1. card_view:cardElevation Attribut fügt eine Erhöhung in CardView hinzu.
  2. card_view:cardBackgroundColor Attribut wird verwendet, um die Hintergrundfarbe des CardView-Hintergrunds anzupassen (Sie können jede Farbe angeben).
  3. card_view:cardCornerRadius Attribut wird verwendet, um 4 Kanten von CardView zu krümmen
  4. card_view:contentPadding Attribut fügt card_view:contentPadding zwischen Karte und Kinder der Karte ein

Hinweis: card_view ist ein Namespace, der in der obersten übergeordneten Layoutansicht definiert ist. xmlns: card_view = " http://schemas.android.com/apk/res-auto "

Hier ein Beispiel:

<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>

Sie können das auch programmgesteuert machen mit:

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

Überprüfen Sie die offiziellen Javadoc für weitere Eigenschaften.

Ripple-Animation hinzufügen

Fügen Sie die folgenden Attribute hinzu, um die Ripple-Animation in einer CardView zu aktivieren:

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

Verwenden von Bildern als Hintergrund in CardView (Probleme mit dem Lollipop-Gerät)

Wenn Sie Image / Color als Hintergrund in einem CardView verwenden, können am Ende leichte weiße Polsterungen (Wenn die Standardfarbe der Karte weiß ist) an den Rändern erhalten. Dies ist auf die standardmäßig abgerundeten Ecken in der Kartenansicht zurückzuführen. So vermeiden Sie diese Ränder in Pre-Lollipop-Geräten.

Wir müssen ein Attribut card_view:cardPreventCornerOverlap="false" in der CardView. 1). Verwenden Sie in XML das folgende Snippet.

<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. In Java wie diesem cardView.setPreventCornerOverlap(false) .

Dadurch wird eine unerwünschte Auffüllung der Kartenränder entfernt. Hier sind einige visuelle Beispiele für diese Implementierung.

1 Karte mit Bildhintergrund in API 21 (vollkommen in Ordnung) Karte mit Bildhintergrund in API 21

2 Karte mit Bildhintergrund in API 19 ohne Attribut (beachten Sie die Auffüllungen um das Bild) Karte mit Bildhintergrund in API 19 ohne Attribut

3 FIXED-Karte mit Bildhintergrund in API 19 mit Attribut cardView.setPreventCornerOverlap(false) ( cardView.setPreventCornerOverlap(false) jetzt behoben) FIXED Karte mit Bildhintergrund in API 19 mit Attribut

Lesen Sie dazu auch die Dokumentation hier
Original SOF Beitrag hier

Animieren Sie die CardView-Hintergrundfarbe mit 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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow