radius - Android: dibujable con esquinas redondeadas solo en la parte superior
rounded layout android xml (6)
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?
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>
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.
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
Puede necesitar 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.
Sobre la base de la respuesta del busylee , esta es la forma de hacer un drawable
que solo tiene una 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>
Tenga en cuenta que el drawable
anterior no se muestra correctamente en la vista previa de Android Studio (2.0.0p7). Para obtener una vista previa de todos modos, cree otra vista y utilícela como android:background="@drawable/..."
.
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