Festlegen der Höhe in XML unter AppCompat CardView unter Android 5.0

95

Soweit ich weiß, schien es zu Beginn der Vorschau keine Möglichkeit zu geben, die Höhe in XML nur auf CardViews ohne einen Hack in Java festzulegen. Gibt es nach der Veröffentlichung der offiziellen Version eine Möglichkeit, dies in XML zu tun, ohne Java-Code zum Festlegen der Höhe zu schreiben?

Ich habe versucht card_view:cardElevation, keine Wirkung zu erzielen. Ich hatte gedacht, als ich die Emulatoren für 5.0 verwendete, war alles in Ordnung. Aber jetzt, wo ich die offizielle Version auf meinem eigentlichen Gerät verwende, sind alle meine CardViewverschwunden

Pre Lollipop, es funktioniert super.

Hier ist meine vollständige XML

<?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:orientation="horizontal"
    android:layout_width="match_parent"
    android:id="@+id/cv1"
    card_view:cardElevation="4dp"
    android:layout_margin="6dp"
    card_view:cardCornerRadius="3dp"
    android:layout_height="match_parent">
TheLettuceMaster
quelle
Ich bin hinter das Problem geraten, habe aber noch keine Antwort. Als ich auf Lollipop umgestiegen bin, sind die Ränder oder Polster irgendwie verschwunden, sodass sie weder die Ecken noch die Kanten der Karte sehen, sodass sie vollständig flach ist.
TheLettuceMaster

Antworten:

316

Es sieht nach einem Rand- / Auffüllproblem aus . Versuchen Sie, das cardUseCompatPadding- Attribut auf true zu setzen. Z.B:

<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="match_parent"
    android:layout_margin="6dp"
    card_view:cardUseCompatPadding="true"
    card_view:cardElevation="4dp"
    card_view:cardCornerRadius="3dp">

Erklärung aus dem Android-Dokument:

CardView fügt zusätzliche Polster hinzu, um Schatten auf Plattformen vor L. zu zeichnen.

Dies kann dazu führen, dass Karten zwischen L und vor L unterschiedliche Größen haben. Wenn Sie CardView an anderen Ansichten ausrichten müssen, benötigen Sie möglicherweise API-spezifische Dimensionsressourcen, um die Änderungen zu berücksichtigen. Alternativ können Sie das Flag cardUseCompatPadding auf true setzen, und CardView fügt auf den Plattformen L und danach dieselben Auffüllwerte hinzu.

Da das Setzen des Flag cardUseCompatPadding auf true unnötige Lücken in der Benutzeroberfläche verursacht, ist der Standardwert false.

Gaëtan M.
quelle
1
card_view: cardUseCompatPadding = "true" hat die Höhe zum Laufen gebracht, aber auch ein paar Polster hinzugefügt ....
Taylor
1
Was ist der Standardwert von cardElevation?
Android-Entwickler
13

Wenn Sie diese Zeile haben

android:hardwareAccelerated="false"

Im Manifest-Anwendungs-Tag wurden Ihre Schatten nicht angezeigt. Versuchen Sie, diese Zeile zu entfernen

oder verwenden

android:hardwareAccelerated="true"

Das hat bei mir funktioniert! Ich hoffe es funktioniert auch bei dir :)

Matin Ashtiani
quelle
Ja! das war das problem !! ich danke dir sehr! aber nicht aufgrund des Bitmap-Bildes, das ich für den Hintergrund verwendet habe, wird die App verlangsamt :(
Kaushal28
13

Sie müssen das cardElevationAttribut verwenden.
Androidx-Bibliotheken:

Sie können die MaterialCardin der offiziellen Materialkomponenten-Bibliothek enthaltenen verwenden :

implementation 'com.google.android.material:material:1.x.x'

Und in Ihrem Layout:

    <com.google.android.material.card.MaterialCardView
        app:cardElevation="xxdp"
        app:cardUseCompatPadding="true"
        ..>

Oder die CardViewin den AndroidX-Paketen:

implementation 'androidx.cardview:cardview:1.x.x'

Und in Ihrem Layout:

     <androidx.cardview.widget.CardView
        app:cardElevation="xxdp"
        app:cardUseCompatPadding="true"
        ..>

ALTE Unterstützungsbibliothek :

<android.support.v7.widget.CardView
    app:cardElevation="xxdp" 
    app:cardUseCompatPadding="true"
    ..>
Gabriele Mariotti
quelle
1
Nein, ich habe es erneut versucht, und das hat nicht funktioniert. Ich habe meine vollständige XML oben hinzugefügt.
TheLettuceMaster
Funktioniert bei mir. Was ist die Standardhöhe?
SMBiggs
Elevation Card Ruhehöhe: 2dp Kartenerhöhung: 8dp Karten haben eine Standardhöhe von 2dp. Auf dem Desktop können Karten eine Ruhehöhe von 0 dp haben und beim Schweben eine Höhe von 8 dp erreichen. Von google.com/design/spec/components/…
ZimaXXX
es ist veraltet
Makarand
1
@Makarand True. Die Designbibliothek wird nicht mehr gepflegt, aber ich habe diese Frage vor 5 Jahren beantwortet. Auf jeden Fall habe ich die Antwort mit andriodx Details aktualisiert.
Gabriele Mariotti
1

Es löste mich durch Hinzufügen

xmlns: card_view = "http://schemas.android.com/apk/res-auto"

beispielsweise:

<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:layout_marginTop="5dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    card_view:cardCornerRadius="5dp">
felhi
quelle
0

Ich füge eine App hinzu: cardElevation = "8dp" Attribut in der Kartenansicht, so wird es sein wie:

<android.support.v7.widget.CardView
        android:layout_width="match_parent"
        android:layout_height="160dp"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="24dp"
        android:layout_marginEnd="16dp"
        android:layout_marginRight="16dp"
        app:cardElevation="8dp"
        app:cardCornerRadius="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView">

        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scaleType="centerCrop"
            android:src="@drawable/kmp_warna1" />

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

Hoffe es wird helfen

Cevin Ways
quelle