Android – dibujable con esquinas redondeadas en la parte superior solamente

Tenía esto 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 a sólo alrededor de 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 ninguno de los rincones son redondeados y consigo un rectángulo llano. ¿Que me estoy perdiendo aqui?

Intente 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 .

EDIT: Ver el comentario de Alex a continuación para una versión más limpia

Trate de 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 para establecer diferentes radio de la esquina del rectángulo. Así que puedes usar este hack.

Basándose en la respuesta de busylee , esto es como se puede hacer un drawable que sólo 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/..." .

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> 

Intenté su código. Tengo un botón de esquina superior redondeado. Di los colores como @ffffff y srtoke di # C0C0C0. Intente 1) dando android: bottomLeftRadius = "0.1dp" en lugar de 0. si su funcionamiento no 2) compruebe en qué dramático y la resolución de los emuladores. I creó una carpeta dibujable en res y utilizarlo. (Hdpi, mdpi ldpi) carpeta que tiene este xml. Esta es mi salida

Introduzca aquí la descripción de la imagen

Puede que necesite leer esta https://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

Y abajo hay una Nota.

Nota Cada esquina debe (inicialmente) ser proporcionada un radio de esquina mayor que 1, o bien no hay esquinas redondeadas. Si desea que las esquinas específicas no se redondeen, una solución es usar android: radio 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 desea esquinas redondeadas.

  • Borde sobre un mapa de bits con esquinas redondeadas en Android
  • crear la forma con dos bordes acotados en android
  • ¿Cómo hacer que las esquinas de un botón alrededor?
  • ¿Quite los bordes redondeados de un Seekbar personalizado?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.