J'ai le CardView suivant et je veux définir un rayon différent pour chaque coin de la carte. Est-il possible de les changer par XML ou par programmation? Merci d'avance.
<Android.support.v7.widget.CardView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginRight="16dp"
Android:layout_marginLeft="16dp"
Android:layout_marginTop="5dp"
Android:layout_marginBottom="5dp"
app:cardCornerRadius="0dp"
app:cardElevation="0dp">
</Android.support.v7.widget.CardView>
[~ # ~] modifier [~ # ~] Comme le suggère Avinash, je recherche le comportement de cette lib github.com/ captain-miao/OptionRoundCardview mais en utilisant l'élément CardView par défaut. S'il n'est pas possible de le changer individuellement, cette lib est une bonne approche.
Il nécessite l'officiel MaterialCardView
(qui étend le androidx.cardview.widget.CardView
) et la version 1.1.0 de la bibliothèque de composants matériels .
Ajoutez à votre mise en page le MaterialCardView
:
<com.google.Android.material.card.MaterialCardView
style="@style/CustomCardViewStyle"
...>
</com.google.Android.material.card.MaterialCardView>
Définissez un style personnalisé héritant d'un style de carte matière (par exemple Widget.MaterialComponents.CardView
) et utilisez l'attribut shapeAppearanceOverlay
:
<style name="CustomCardViewStyle" parent="@style/Widget.MaterialComponents.CardView">
<item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay_card_custom_corners</item>
</style>
<style name="ShapeAppearanceOverlay_card_custom_corners" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSizeTopRight">4dp</item>
<item name="cornerSizeTopLeft">8dp</item>
<item name="cornerSizeBottomRight">16dp</item>
<item name="cornerSizeBottomLeft">0dp</item>
</style>
Vous pouvez également y parvenir par programme.
Appliquez simplement un ShapeAppearanceModel
personnalisé aux coins de la carte.
Quelque chose comme:
float radius = getResources().getDimension(R.dimen.my_corner_radius);
cardView.setShapeAppearanceModel(
cardView.getShapeAppearanceModel()
.toBuilder()
.setTopLeftCorner(CornerFamily.ROUNDED,..)
.setTopRightCorner(CornerFamily.ROUNDED,..)
.setBottomRightCorner(CornerFamily.ROUNDED,radius)
.setBottomLeftCornerSize(0)
.build());
Remarque: il nécessite la version 1.1.0 de la bibliothèque. Actuellement:
implementation 'com.google.Android.material:material:1.1.0'
Vous pouvez créer un xml personnalisé et le nommer rounded_corners.xml
comme ça:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<corners Android:radius="1dp"
Android:topLeftRadius="20dp"
Android:topRightRadius="30dp"
Android:bottomLeftRadius="40dp"
Android:bottomRightRadius="50dp"/>
<solid Android:color="your_background_color" />
</shape>
Et puis utilisez ceci comme arrière-plan pour votre CardView
:
Android:background="@drawable/rounded_corners"
EDIT: Je viens de remarquer que cela peut fonctionner pour toutes les autres vues autres que CardView
, donc référez-vous à cette question pour voir comment faire une solution de contournement.
Salut, vous pouvez l'ajouter par programme ou par xml avec le code suivant.
app:cardCornerRadius="0dp"// xml
cardView.setRadius(0);
celui-ci est extra qui cherche l'élévation
app:cardElevation="0.7dp"//xml
app:cardMaxElevation="1dp"//xml
cardView.setCardElevation(2.1f);//code
cardView.setMaxCardElevation(3f);//code
La représentation complète Java du XML de CardView).
CardView cardView = (CardView) findViewById(R.id.cardView);
cardView.setUseCompatPadding(true);
cardView.setContentPadding(30, 30, 30, 0);
cardView.setPreventCornerOverlap(true);
cardView.setCardBackgroundColor(Color.WHITE);
cardView.setCardElevation(2.1f);
cardView.setRadius(0);
cardView.setMaxCardElevation(3f);