2013-03-20 13 views
30

Desidero creare un layout con angoli arrotondati e uno sfondo a colori pieno.Aggiunta di uno sfondo colorato e raggio di confine a un layout

Questo è il mio layout:

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="210dp" 
    android:orientation="vertical" 
    android:layout_marginBottom="10dp"   
    android:background="@drawable/offerItemLayout"> 
    <LinearLayout 
     android:id="@+id/offerImageHolder" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="vertical"> 
      . 
      . 
      . 
    </LinearLayout> 
</LinearLayout> 

Ho il seguente XML disegnabile (offerItemLayout) che crea i confini in modo corretto:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item> 
     <shape xmlns:android="http://schemas.android.com/apk/res/android" 
       android:shape="rectangle"> 
      <corners 
       android:radius="5dp"/> 
      <stroke 
       android:width="1dp" 
       android:color="@color/bggrey" />    
     </shape> 
    </item> 
    // The lines below causes an inflation failure. 
    <item> 
     <fill 
      android:color="@color/white"/> 
    </item> 
</layer-list> 

Ma inserendo l'oggetto con un riempimento provoca l'inflazione del layout per fallire.

Inoltre, se assegno uno sfondo colorato al LinearLayout interno (offerImageHolder), sostituisce il primo sfondo con i miei angoli arrotondati.

Qualche idea su come farlo correttamente? :/

risposta

69

Non è necessario l'elemento di riempimento separato. In realtà, non è valido. Devi solo aggiungere un blocco solid allo shape. La successiva stroke disegna in cima al solid:

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 

    <corners android:radius="5dp" /> 
    <solid android:color="@android:color/white" /> 
    <stroke 
     android:width="1dip" 
     android:color="@color/bggrey" /> 
</shape> 

Inoltre, non è necessario il layer-list se si dispone di un solo shape.

+1

Cosa succede se il bordo che desidero è solo in basso? – Si8

+0

@ SiKni8 fattibile, ma è una domanda diversa e non posso davvero postarla qui. se mi fai una nuova domanda e me ne fai cenno, pubblicherò una risposta. –

+0

Vorrei aggiungere un bordo di colore in cima alla carta ... – Si8

11

background.xml nella cartella drawable.

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
<solid android:color="#FFFFFF"/>  
<stroke android:width="3dp" 
     android:color="#0FECFF" /> 
<gradient       //specify graident 
    android:startColor="#ffffffff" 
    android:endColor="#110000FF" 
    android:angle="90"/> 

<padding android:left="5dp" 
     android:top="5dp" 
     android:right="5dp" 
     android:bottom="5dp"/> 
<corners android:bottomRightRadius="7dp" 
     android:bottomLeftRadius="7dp" 
     android:topLeftRadius="7dp" 
     android:topRightRadius="7dp"/> 
</shape> 

<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="210dp" 
android:orientation="vertical" 
android:layout_marginBottom="10dp"   
android:background="@drawable/background"> 
Problemi correlati