2011-12-06 10 views
17

En mi diseño Android xml, estoy aplicando el borde usando borderframe.xml como fondo.¿Por qué no puedo crear el borde redondo para una esquina específica?

archivo borderframe.xml se parece a continuación:

<?xml version="1.0" encoding="UTF-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke 
     android:width="1dip" 
     android:color="#ffffff"/> 
    <solid 
     android:color="#95865F"/> 
    <corners 
     android:radius="10px"/> 

    <padding 
     android:left="1dp" 
     android:right="1dp" 
     android:top="1dp" 
     android:bottom="1dp"/> 
</shape> 

Ahora, Si bien no es un androide: radio = "10px", entonces es obras, pero mientras yo voy a dar forma redonda al único rincón específica entonces no funciona. No hay ningún mensaje de erro en el registro de gato pero me pareció error en Eclipse como:

The graphics preview in the layout editor may not be accurate: 
* Different corner sizes are not supported in Path.addRoundRect. 

Incluso si no hay relleno en ese archivo XML entonces también que no soy capaz de ver cualquier frontera.

Ahora, ¿qué debo hacer para ello? y cuál es la solución si quiero crear el borde redondeado solo para topLeftcorner y bottomLeftCorner. ? Gracias.

Respuesta

10

Vas a tener que hacer eso, suponiendo que sólo desea una esquina izquierda superior redondeada:

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
    <corners 
     android:radius="20sp" 
     android:topRightRadius="0dp" 
     android:bottomRightRadius="0dp" 
     android:bottomLeftRadius="0dp" /> 
    <gradient 
     android:startColor="@color/logo_blue" 
     android:endColor="@color/blue" 
     android:angle="0"/> 
</shape> 

Explicación: Cada rincón tiene que (inicialmente) puede proporcionar un radio de esquina mayor que 1, o bien no se redondean las esquinas Si desea que las esquinas específicas no se redondeen, una solución alternativa es usar android:radius para establecer un radio de esquina predeterminado mayor que 1, pero luego anular todas y cada esquina con los valores que realmente desee, proporcionando cero ("0dp") donde no quieres esquinas redondeadas [source]

Como consecuencia de ello, es necesario definir su estirable como:

<?xml version="1.0" encoding="UTF-8"?> 
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <stroke 
     android:width="1dip" 
     android:color="#ffffff"/> 
    <solid 
     android:color="#95865F"/> 
    <corners 
     android:radius="10px" 
     android:topRightRadius="0dp" 
     android:bottomRightRadius="0dp" /> 

    <padding 
     android:left="1dp" 
     android:right="1dp" 
     android:top="1dp" 
     android:bottom="1dp"/> 
</shape> 

actualización

De The Shape Drawable Resource Android Documentation:

androide: radio Dimensión. El radio para todas las esquinas, como una dimensión recurso de valor o dimensión. Esto se reemplaza para cada esquina por los siguientes atributos de .

reemplazado es la palabra clave para su problema ...

+0

OK Gracias. Déjame intentarlo. –

+1

Bien, gracias. Pero si no hay relleno definir en forma, entonces no puedo ver el borde. . por qué ? –

+0

Si no hay relleno en esa forma, entonces no puedo ver la esquina ¿por qué? –

6

estoy usando herramientas de SDK 19, plataforma-herramientas 11 y ejecutando la aplicación en Android 4.0.3. Usar los siguientes trabajos XML para mí:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle"> 
    <solid android:color="#dd000000"/> 
    <padding 
     android:left="7dp" 
     android:top="7dp" 
     android:right="7dp" 
     android:bottom="7dp" /> 
    <corners 
     android:bottomLeftRadius="25dp" 
     android:bottomRightRadius="25dp" 
     android:topLeftRadius="0dp" 
     android:topRightRadius="0dp" /> 
</shape> 

La advertencia de Eclipse se trata de no poder mostrar la vista previa. En la aplicación, aparece correcta.

+0

Aha. Todavía sucede con Android Studio a partir de ahora. –

16

También estoy enfrentando el mismo problema. Pero para eso uso layer-list. Publico mi respuesta aquí que puede ser de ayuda.
Por favor, compruebe la pantalla de salida image 1

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <shape 
     android:shape="rectangle"> 
      <stroke android:width="1dp" android:color="#c1c1c1" /> 
      <solid android:color="#c1c1c1" /> 
      <corners android:radius="20dp"/> 
     </shape> 
    </item> 

    <item android:right="20dp" 
     > 
     <shape 
     android:shape="rectangle"> 
      <stroke android:width="1dp" android:color="#c1c1c1" /> 
      <solid android:color="#c1c1c1" /> 
     </shape> 
    </item> 

</layer-list> 
+0

Este es el único que funciona para mí. Gracias. – black

0

me dio la solución en uno de los foros. Lo resolví comentando cada esquina & añadiéndola al xml en drawable.He conservado el código comentado a continuación solo para entenderlo.

XML Code-

<?xml version="1.0" encoding="utf-8"?> 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > 
     <solid android:color="#fd2149" /> 
     <stroke android:width="1dip" android:color="#ffd102"/> 
     <!-- <corners 
      android:bottomLeftRadius="8dp" 
      android:bottomRightRadius="8dp" 
      android:topLeftRadius="8dp" 
      android:topRightRadius="8dp" /> 
     --> 
     <corners android:radius="8dp" /> 
    </shape> 

--- Edited- El código anterior es mi back.xml en la carpeta estirable y, si es necesario, puede agregar relleno a la misma back.xml. Para aquellos que son nuevos desarrolladores, el back.xml se hace referencia desde el archivo de diseño de la siguiente manera

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/tableLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:textSize="20sp" 
    android:scrollbars="vertical" 
    android:background="@drawable/back"> 

Espero que esto ayude.

Cuestiones relacionadas