2011-06-28 20 views
7

Estoy intentando crear un borde de diseño con esquinas que son cuadradas en el exterior y en el interior. Me he reunido que necesito para crear una definición XML estirable compuesta de dos formas: una con un radio de anchura del trazo y la esquina y otro con sólo una anchura de trazo:Borde de diseño de forma cuadrada con bordes internos redondos

dibujables/

round_border.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="4dp" android:color="#FF000000" /> 
    <padding android:left="7dp" android:top="7dp" 
      android:right="7dp" android:bottom="7dp" /> 
    <corners android:radius="4dp" /> 
    <solid android:color="#FFC0C0C0" /> 
</shape> 

square_border.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="2dp" android:color="#FF000000" /> 
    <solid android:color="#FFC0C0C0" /> 
</shape> 

Cada una de estas obras de forma independiente como una frontera cuando appliedby en sí de esta manera:

androide: Fondo = "@ estirable/round_border" pero cuando uno o ambos se añaden a un elemento estirable lista de este modo:

composite_border.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <layer-list> 
     <item android:drawable="@drawable/round_border"/> 
     <!-- <item android:drawable="@drawable/square_border"/> --> 
    </layer-list> 
</shape> 

y:

android: background = "@ drawable/composite_border"

El fondo del diseño es completamente negro en lugar de solo un borde negro. ¿Alguien sabe cómo hacer que la lista de capas funcione para esta tarea?

+0

gracias por compartir esto! – cV2

Respuesta

2

square_border.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke android:width="2dp" 
      android:color="#FF000000" 
    /> 
    <solid android:color="#FFC0C0C0" /> 
</shape> 

composite_border.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <layer-list> 
     <item android:drawable="@drawable/round_border"/> 
     <!-- <item android:drawable="@drawable/square_border"/> --> 
    </layer-list> 
</shape> 

cuidado con los comentarios y las comillas! =]

+0

Gracias - He reparado la publicación. – jchristof

+0

Gracias - aún estoy buscando la respuesta. – jchristof

4

De Shape Drawable Doc se puede ver que no se puede tener la forma de capa-lista en el interior por lo que debe definir su composite_border.xml como esta nota

<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:drawable="@drawable/square_border"/> 
    <item android:drawable="@drawable/round_border"/> 
</layer-list> 

que he cambiado el orden de los elementos en el interior de la capa -lista como se indica en la documentación de la capa lista
Each drawable in the list is drawn in the order of the list—the last drawable in the list is drawn on top
y desea que sea cuadrado desde fuera

0

Prueba esto va a funcionar lo suficientemente bien:

solid es color de fondo

stroke es frontera

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid 
     android:color="@color/white"/> 
    <stroke android:width="1dp" android:color="#ffaaaaaa" /> 
    <size 
     android:width="15dp" 
     android:height="15dp"/> 
</shape> 
2

crear un archivo XML

como round_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="oval"> 
    <solid 
     android:color="#CCCC33"/> 
    <size 
     android:width="35dp" 
     android:height="35dp"/> 
</shape> 

En la disposición establecer como fondo de

<LinearLayout 
       android:id="@+id/layout_wellbeing" 
       android:layout_width="wrap_content" 
       android:layout_height="match_parent" 
       android:layout_weight="1" 
       android:gravity="center" 
       android:background="@drawable/rounded_corner_leuvan" 
       android:orientation="horizontal" > 
</LinearLayout> 
Cuestiones relacionadas