Wenn Sie nicht versuchen, die Android- CardView
Klasse zu erweitern, können Sie dieses Attribut nicht anpassen XML
.
Es gibt jedoch eine Möglichkeit, diesen Effekt zu erzielen.
Platziere ein CardView
Inneres in einem anderen CardView
und wende einen transparenten Hintergrund auf dein Äußeres an CardView
und entferne seinen Eckradius ( "cornerRadios = 0dp"
). Ihr Inneres CardView
hat zum Beispiel einen CornerRadius-Wert von 3dp. Wenden Sie dann ein marginTop auf Ihr Inneres an CardView
, sodass die unteren Ränder vom Äußeren abgeschnitten werden CardView
. Auf diese Weise wird der Radius der unteren Ecke Ihres Inneren CardView
ausgeblendet.
Der XML-Code lautet wie folgt:
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view_outer"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
card_view:cardBackgroundColor="@android:color/transparent"
card_view:cardCornerRadius="0dp"
card_view:cardElevation="3dp" >
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view_inner"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_marginTop="3dp"
card_view:cardBackgroundColor="@color/green"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="0dp" >
</android.support.v7.widget.CardView>
</android.support.v7.widget.CardView>
Und der visuelle Effekt ist der folgende:
Legen Sie Ihre Inhalte immer in Ihr Inneres CardView
. Ihre äußere CardView dient nur dazu, die unteren abgerundeten Ecken der inneren zu "verstecken" CardView
.
quelle
innerRadius
,shape
undthicknessRatio
app:cardCornerRadius="40dp"
wird auch funktionieren.Sie können den Standard verwenden,
MaterialCard
der in der offiziellen Materialkomponentenbibliothek enthalten ist .Verwendung in Ihrem Layout:
Verwenden Sie in Ihrem Stil das
shapeAppearanceOverlay
Attribut, um die Form anzupassen (der Standard-Eckenradius ist4dp
)Sie können auch verwenden:
Es ist das Ergebnis:
quelle
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MaterialCardView.Cut"
Es gibt ein Beispiel, wie dies erreicht werden kann, wenn sich die Karte ganz unten auf dem Bildschirm befindet. Wenn jemand ein solches Problem hat, machen Sie einfach so etwas:
Die Kartenansicht hat einen negativen unteren Rand. Die Ansicht in einer Kartenansicht hat den gleichen, aber positiven unteren Rand. Auf diese Weise werden abgerundete Teile unter dem Bildschirm ausgeblendet, aber alles sieht genauso aus, da die Innenansicht einen Gegenrand hat.
quelle
Sie können diese zeichnbare XML-Datei verwenden und als Hintergrund für die Kartenansicht festlegen:
quelle
Ich habe eine zeichnbare Bibliothek für die benutzerdefinierte runde Eckposition geschrieben. Sie sieht folgendermaßen aus:
Sie können diese Bibliothek hier bekommen:
https://github.com/mthli/Slice
quelle
Sie müssen zwei Dinge tun:
1) Rufen Sie
setPreventCornerOverlap(false)
Ihre CardView auf.2) Fügen Sie eine abgerundete Bildansicht in CardView ein
Beim Runden Ihrer Bildansicht hatte ich das gleiche Problem, daher habe ich eine Bibliothek erstellt, in der Sie an jeder Ecke unterschiedliche Radien festlegen können . Endlich habe ich das Ergebnis bekommen, wie ich es unten haben wollte.
https://github.com/pungrue26/SelectableRoundedImageView
quelle
Sie können die Bibliothek verwenden: OptionRoundCardview
quelle
Sie können Ihre ImageView in eine CardView einfügen und diese Eigenschaften zur ImageView hinzufügen:
Auf diese Weise werden Sie die abgerundete untere Ecke los, aber denken Sie daran, dass dies den Preis für das Abschneiden eines kleinen Teils Ihres Bildes mit sich bringt.
quelle
Der einfachste Weg, dies in Android Studio zu erreichen, wird unten erklärt:
Schritt 1:
Schreiben Sie die folgende Zeile in Abhängigkeiten in
build.gradle
:Schritt 2:
Kopieren Sie den folgenden Code in Ihre XML-Datei, um die zu integrieren
CardView
.Um
cardCornerRadius
zu arbeiten, müssen Sie die folgende Zeile in das übergeordnete Layout einfügen:xmlns:card_view="http://schemas.android.com/apk/res-auto"
Und denken Sie daran,
card_view
als Namespace für die Verwendung voncardCornerRadius
Eigenschaften zu verwenden.Zum Beispiel :
card_view:cardCornerRadius="4dp"
XML-Code:
quelle
Ein einfacher Weg, dies zu erreichen, wäre:
1.Erstellen Sie eine benutzerdefinierte Hintergrundressource (wie eine Rechteckform) mit abgerundeten Ecken.
2.Stellen Sie diesen benutzerdefinierten Hintergrund mit dem Befehl -
das hat bei mir funktioniert.
Das
XML
Layout habe ich mit Radius oben links und unten rechts gemacht.In Ihrem Fall müssen Sie nur topLeftRadius sowie topRightRadius ändern.
Wenn Sie ein Layout haben, das sich mit den Ecken der Kartenansicht überschneidet und möglicherweise eine andere Farbe hat, benötigen Sie möglicherweise eine andere Hintergrundressourcendatei für das Layout und stellen diese Hintergrundressource in der XML auf Ihr Layout ein.
Ich habe die obige Methode ausprobiert und getestet. Hoffe das hilft dir.
quelle
Wenn Sie den Kartenhintergrund programmgesteuert einstellen, verwenden Sie "Verwenden"
cardView.setCardBackgroundColor()
und "Nicht verwenden"cardView.setBackgroundColor()
und stellen Sie sicher, dass Sie "Verwenden"app:cardPreventCornerOverlap="true"
in der Datei "cardView.xml" verwenden. Das hat es für mich behoben.Übrigens ist der obige Code (in Anführungszeichen) in Kotlin und nicht in Java. Verwenden Sie das Java-Äquivalent, wenn Sie Java verwenden.
quelle