Je suis nouveau sur Android et ceci est ma première question ici.
J'essaie d'ajouter une bordure verticale colorée au début de la vue de carte. Comment puis-je le réaliser sur XML? J'ai essayé de l'ajouter avec textview vide, mais cela gâche tout le cardview lui-même. S'il vous plaît vérifier le lien de l'image affichée ci-dessous par exemple.
activity_main.xml
<Android.support.v7.widget.CardView
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
card_view:contentPadding="16dp"
card_view:cardElevation="2dp"
card_view:cardCornerRadius="5dp">
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<TextView
style="@style/Base.TextAppearance.AppCompat.Headline"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Title" />
<TextView
style="@style/Base.TextAppearance.AppCompat.Body1"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Content here" />
</LinearLayout>
</Android.support.v7.widget.CardView>
Merci beaucoup
essayez de faire:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.CardView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
xmlns:card_view="http://schemas.Android.com/apk/res-auto"
card_view:cardElevation="2dp"
card_view:cardCornerRadius="5dp">
<FrameLayout
Android:background="#FF0000"
Android:layout_width="4dp"
Android:layout_height="match_parent"/>
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:padding="16dp"
Android:orientation="vertical">
<TextView
style="@style/Base.TextAppearance.AppCompat.Headline"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Title" />
<TextView
style="@style/Base.TextAppearance.AppCompat.Body1"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Content here" />
</LinearLayout>
</Android.support.v7.widget.CardView>
cela supprime le remplissage de la vue de la carte et ajoute un FrameLayout avec une couleur. Vous devez ensuite corriger le remplissage dans LinearLayout, puis pour les autres champs.
Mettre à jour
Si vous souhaitez conserver le rayon du coin de la carte, créez card_Edge.xml dans un dossier pouvant être dessiné:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<solid Android:color="#F00" />
<size Android:width="10dp"/>
<padding Android:bottom="0dp" Android:left="0dp" Android:right="0dp" Android:top="0dp"/>
<corners Android:topLeftRadius="5dp" Android:bottomLeftRadius="5dp"
Android:topRightRadius="0.1dp" Android:bottomRightRadius="0.1dp"/>
</shape>
et dans la disposition du cadre, utilisez Android:background="@drawable/card_Edge"
Je pense que cette solution n’est peut-être pas efficace, mais elle répond à cet objectif et ajoute de la souplesse à la largeur de la bordure.
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_margin="40dp"
Android:layout_gravity="center"
card_view:cardBackgroundColor="@color/some_color"
card_view:cardCornerRadius="20dp"
card_view:contentPadding="5dp"> <!-- Change it to customize the border width -->
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="center"
card_view:cardCornerRadius="20dp"
card_view:contentPadding="5dp">
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<!-- Add your UI elements -->
</RelativeLayout>
</Android.support.v7.widget.CardView>
</Android.support.v7.widget.CardView>
Je voudrais améliorer la solution proposée par Amit. J'utilise les ressources données sans ajouter shapes
ou Views
supplémentaire. Je donne à CardView
une couleur d'arrière-plan, puis une mise en page imbriquée, la couleur blanche à surimprimer tout en conservant un leftMargin
...
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.CardView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
xmlns:card_view="http://schemas.Android.com/apk/res-auto"
card_view:cardElevation="2dp"
card_view:cardBackgroundColor="@color/some_color"
card_view:cardCornerRadius="5dp">
<!-- The left margin decides the width of the border -->
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:padding="16dp"
Android:layout_marginLeft="5dp"
Android:background="#fff"
Android:orientation="vertical">
<TextView
style="@style/Base.TextAppearance.AppCompat.Headline"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Title" />
<TextView
style="@style/Base.TextAppearance.AppCompat.Body1"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:text="Content here" />
</LinearLayout>
</Android.support.v7.widget.CardView>
Depuis la mise à jour de la conception du matériel, il prend en charge app:strokeColor
et aussi app:strokeWidth
. voir plus
utiliser la mise à jour de la conception matérielle. ajouter le code suivant à build.gradle
(: app)
dependencies {
// ...
implementation 'com.google.Android.material:material:1.0.0'
// ...
}