Pregunta Android: dibujable con esquinas redondeadas solo en la parte superior


Tenía este dibujable 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 solo para 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 simple. ¿Que me estoy perdiendo aqui?


108
2018-01-19 17:30


origen


Respuestas:


Prueba a 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 el comentario de Alex a continuación para una versión más limpia


208
2018-01-19 18:29



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 diferentes radios de esquina de rectángulo. Entonces puedes usar este truco.


12
2018-04-06 13:27



Sobre la base de La respuesta de Busylee, así es como puedes hacer un drawable que solo tiene uno Naciones Unidasesquina 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>

Tenga en cuenta que el anterior drawable es no se muestra correctamente en la vista previa de Android Studio (2.0.0p7). Para obtener una vista previa de todos modos, crea otra vista y úsala como android:background="@drawable/...".


7
2018-01-23 14:59



En mi caso, 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
2018-04-05 13:02



intenté tu código. Tengo un botón de esquina superior redondeado. di los colores como @ffffff y srtoke di # C0C0C0. intente 1) dar android: bottomLeftRadius = "0.1dp" en lugar de 0. si no funciona 2) compruebe qué resolución dibuja y emuladores. Creé una carpeta dibujable debajo de res y usándola. (hdpi, mdpi ldpi) carpeta tiene este xml.  esta es mi salida

enter image description here


2
2018-01-19 18:29



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

y abajo hay una Nota.

Nota: Se debe proporcionar (inicialmente) a cada esquina 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 cada esquina con los valores que realmente desea, proporcionando cero ("0dp" ) donde no quieres esquinas redondeadas.


1
2018-05-29 01:48