Android-dibujable con esquinas redondeadas solo en la parte superior


Tenía este elemento de diseño para tener un rectángulo redondeado como fondo:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white" />
    <stroke android:width="1dp" android:color="@color/light_gray" />
    <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
    <corners android:radius="6dp" />
</shape>

Esto está funcionando bien, como se esperaba.

Ahora, quiero cambiar esto a solo redondear las esquinas superiores, así que lo cambio a esto:

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/white" />
    <stroke android:width="1dp" android:color="@color/light_gray" />
    <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" />
    <corners android:topLeftRadius="6dp" android:topRightRadius="6dp"
             android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp"/>
</shape>

Pero ahora ninguna de las esquinas está redondeada y obtengo un rectángulo liso. ¿Qué me estoy perdiendo aquí?

Author: Aleks G, 2012-01-19

6 answers

Intenta dar estos valores:

 <corners android:topLeftRadius="6dp" android:topRightRadius="6dp"
         android:bottomLeftRadius="0.1dp" android:bottomRightRadius="0.1dp"/>

Tenga en cuenta que he cambiado 0dp a 0.1dp.

EDITAR: Ver Aleks G comentario a continuación para una versión más limpia

 216
Author: aqs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-19 07:00:57

Intenta hacer algo como esto:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:bottom="-20dp" android:left="-20dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />

            <corners android:radius="20dp" />
        </shape>
    </item>
</layer-list>

Parece que no es adecuado establecer un radio de esquina diferente del rectángulo. Así que puedes usar este hack.

 12
Author: busylee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-06 13:27:38

Basándose en la respuesta de busylee , así es como puedes hacer un drawable que solo tiene una un esquina redondeada (arriba a la izquierda, en este ejemplo):

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />
            <!-- A numeric value is specified in "radius" for demonstrative purposes only,
                  it should be @dimen/val_name -->
            <corners android:radius="10dp" />
        </shape>
    </item>
    <!-- To keep the TOP-LEFT corner UNROUNDED set both OPPOSITE offsets (bottom+right): -->
    <item
        android:bottom="10dp"
        android:right="10dp">
        <shape android:shape="rectangle">
            <solid android:color="@color/white" />
        </shape>
    </item>
</layer-list>

Ten en cuenta que lo anterior drawable es no se muestra correctamente en la vista previa de Android Studio (2.0.0p7). Para previsualizarlo de todos modos, cree otra vista y use esto como android:background="@drawable/...".

 7
Author: Dev-iL,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:10

En mi caso por debajo del código

    <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:top="10dp" android:bottom="-10dp"
        >

        <shape android:shape="rectangle">
            <solid android:color="@color/maincolor" />

            <corners
                android:topLeftRadius="10dp"
                android:topRightRadius="10dp"
                android:bottomLeftRadius="0dp"
                android:bottomRightRadius="0dp"
            />
        </shape>

    </item>
    </layer-list>
 4
Author: Shekhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-05 13:02:57

Probé tu código. tengo un botón de esquina redondeada superior. di los colores como @ffffff y srtoke di #C0C0C0. prueba 1) dando android: bottomLeftRadius= "0.1 dp" en lugar de 0. si no está funcionando 2) compruebe en qué drawable y la resolución de los emuladores. creé una carpeta de elementos de diseño en res y la usé. (hdpi, mdpi ldpi) carpeta tiene este xml. esta es mi salida

introduzca la descripción de la imagen aquí

 2
Author: Arul T,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-19 18:29:54

Es posible que necesite leer esto https://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

Y debajo hay una Nota.

Tenga en cuenta que cada esquina debe (inicialmente) tener un radio de esquina mayor que 1, o de lo contrario no se redondean las esquinas. Si desea que las esquinas específicas no se redondeen, una solución es usar android: radius para establecer un radio de esquina predeterminado mayor que 1, pero luego anular todas y cada una de las esquinas con los valores que realmente desea, proporcionando cero ("0dp") donde no quieres esquinas redondeadas.

 1
Author: lightman1988,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-29 01:48:14