2012-05-13 11 views

risposta

23

Per quanto ho capito, non esiste un modo semplice per farlo. ma se utilizzi la lista dei livelli con un oggetto che ha il bordo e poi uno che non ha un offset da tutti i lati per i quali desideri un bordo uguale alla larghezza del bordo, lo otterresti.

Permettetemi di fare il xml per rappresentare il fondo senza confini ..

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <!-- Border --> 
    <item> 
     <shape> 
      <solid android:color="#f000"></solid> 
     </shape> 
    </item> 
    <!-- Body --> 
    <item android:left="2dip" 
      android:top="2dp" 
      android:right="2dp"> 
     <shape> 
      <solid android:color="#ffafafaf"></solid> 
     </shape> 
    </item> 
</layer-list> 

Come potete vedere, sto dicendo la seconda voce da inserto del primo da due DP di tutte le parti ad eccezione in basso (da qui il risultato non-border sul fondo), ci si va:

enter image description here

Quindi, in sostanza non si tratta di una frontiera per-sé, è la forma dal basso (anche se si potrebbe aggiungere un bordo se hai bisogno di essere tratteggiato o punteggiato o altro) un secondo elemento con sarebbe il corpo del pulsante. Tutto nello stesso drawable :)

Questo può essere applicato a qualsiasi bordo che si desidera rimuovere, modificando i valori che l'elemento è inserito, ad esempio, se cambio lo right nell'elemento Corpo su bottom, manca confine sarebbe quello giusto dal momento che è l'uno senza l'inserto

+0

Beh, dove fare Devo posizionare i miei stili? Nel primo , giusto? –

+0

A proposito, sto cercando di usarlo su EditText. –

+0

Non importa a quale vista lo si applica. Il primo 'item' è solo per il bordo, quindi è necessario dividere lo stile tra questi due. Se vuoi uno sfondo verde, ad esempio, lo aggiungerei al secondo elemento, quello chiamato "body" sul mio codice –

10

Questo è un po 'di un hack, ma la sua possibile rimuovere una o più frontiere utilizzando un inset drawable con valori negativi. Avvolgere la forma in un inset e applicare un valore negativo android:insetTop, android:insetBottom, android:insetLeft o android:insetRight con valore abs uguale alla larghezza del tratto.

enter image description here

Ad esempio, per rimuovere il bordo inferiore di un rettangolo con una corsa 4dp, utilizzare un valore di android:insetBottom-4dp.

<?xml version="1.0" encoding="utf-8"?> 
<inset xmlns:android="http://schemas.android.com/apk/res/android" 
    android:insetBottom="-4dp"> 

    <shape android:shape="rectangle"> 
     <solid android:color="#FFFFFF" /> 
     <stroke android:width="4dp" android:color="#000000" /> 
     <corners android:radius="4dp" /> 
    </shape> 

</inset> 

Questo sembra funzionare bene purché gli angoli della forma abbiano un raggio inferiore alla larghezza del tratto. Altrimenti usa il più grande dei due valori (il raggio) quando si applica l'inserto per nascondere completamente le parti arrotondate dei bordi adiacenti.

+0

ottimo, Grazie, è molto utile –

0

È un trucco xml. Per prima cosa devi riempire il livello con un colore specifico (Colore linea). Quindi devi riempirlo con un altro colore (Colore di sfondo) mentre premi leggermente il disegno dal lato in cui vuoi disegnare la linea. Qui è il mio codice:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 

     <!-- First we have to create the line color (Black: #000000 and 
      Set position to 0 from all sides, this will allow us 
      even to to determine border size in any side (top, 
      right, bottom, left) --> 

    <item android:top="0dp" 
     android:right="0dp" 
     android:left="0dp" 
     android:bottom="0dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#000000"></solid> 
     </shape> 
    </item> 

    <!-- Here we fill the content with our color, and I will 
     push 1dp from the top so this size (top = 1dp) will 
     keep the previous color and it will look like the border 
     --> 

    <item android:top="1dp" 
     android:right="0dp" 
     android:left="0dp" 
     android:bottom="0dp"> 
     <shape android:shape="rectangle"> 
      <solid android:color="#f4f4f4"></solid> 
     </shape> 
    </item> 
</layer-list> 

https://i.stack.imgur.com/ifak8.jpg

Ecco come appare:

enter image description here

Problemi correlati