2016-02-12 26 views
8

Sono nuovo per Android e questa è la mia prima domanda qui.Come aggiungere un bordo colorato su cardview?

Sto provando ad aggiungere un bordo verticale colorato all'inizio del cardview. Come posso ottenerlo su xml? Ho provato ad aggiungerlo con textview vuota ma sta rovinando l'intera cardview stessa. Si prega di controllare il link dell'immagine pubblicato qui sotto per esempio.

Colored Border on Cardview

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> 

Molte grazie

+0

hai bisogno di utilizzare un cardview qui? che ne dici di un piano linearlayout e aggiungendo un ItemDecoration alla tua visualizzazione recycler? –

+0

Sono un principiante su Android e recyclerview è un po 'avanzato per il mio set di competenze. Quindi, sto usando cardview qui. –

+0

ok, ho pubblicato una soluzione per voi sotto –

risposta

15

provare a fare:

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

questo rimuove l'imbottitura dal CardView e aggiunge un FrameLayout con un col o. È quindi necessario fissare l'imbottitura in LinearLayout poi per gli altri campi

Aggiornamento

Se si desidera conservare il raggio dell'angolo carta di creare card_edge.xml nella cartella drawable:

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

e nel layout del frame usare android:background="@drawable/card_edge"

+0

@GeorgeForster aggiornato per utilizzare uno sfondo disegnabile per preservare gli angoli delle carte se si desidera averli ancora –

+0

non ha funzionato per me. perché 4 dp di larghezza per il layout del frame? –

13

Penso che questa soluzione potrebbe non essere efficiente ma serve allo scopo e aggiunge flessibilità con la larghezza del bordo.

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

Questa è una pessima soluzione. Si sta aggiungendo il livello di gerarchia della vista, che comporterebbe una penalizzazione delle prestazioni. – Sadegh

+0

Sì, sono d'accordo, era solo una soluzione pigra da parte mia. – Amit

+0

Buona idea ci dovrebbero essere caratteristiche interne disponibili – Sam