web-dev-qa-db-fra.com

Android - dessinable avec les coins arrondis en haut uniquement

J'ai eu ce dessin que d'avoir un rectangle arrondi comme arrière-plan:

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

Cela fonctionne bien, comme prévu.

Maintenant, je veux changer ceci pour arrondir uniquement les coins supérieurs, donc je le change en ceci:

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

Mais maintenant, aucun des coins n’est arrondi et j’obtiens un rectangle uni. Qu'est-ce que j'oublie ici?

133
Aleks G

Essayez de donner ces valeurs:

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

Notez que j'ai changé 0dp en 0.1dp.

EDIT: Voir Aleks G commentaire ci-dessous pour une version plus propre

263
aqs

Essayez de faire quelque chose comme ça:

<?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>

Il semble ne pas convenir de définir un rayon de coin différent du rectangle. Donc, vous pouvez utiliser ce hack.

14
busylee

Dans mon cas ci-dessous le code

    <?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>
8
Shekhar

En vous appuyant sur réponse de busylee , voici comment créer un drawable n’ayant qu’un seul un coin arrondi ( en haut à gauche, dans cet exemple):

<?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>

Veuillez noter que la drawable ci-dessus n'est pas correctement affichée dans l'aperçu Android Studio (2.0.0p7). Pour le prévisualiser malgré tout, créez une autre vue et utilisez-la en tant que Android:background="@drawable/...".

8
Dev-iL

J'ai essayé votre code et obtenu un bouton de coin arrondi en haut. J'ai donné les couleurs comme @ffffff et le trait que j'ai donné #C0C0C0.

essayer

  1. Donner Android: bottomLeftRadius = "0.1dp" au lieu de 0. si cela ne fonctionne pas
  2. Vérifiez ce qui est dessinable et la résolution de l'émulateur. J'ai créé un dossier pouvant être dessiné sous res et l'utiliser. (hdpi, mdpi ldpi) le dossier que vous avez ce XML. c'est ma sortie.

enter image description here

2
Arul T

Vous devrez peut-être lire ceci https://developer.Android.com/guide/topics/resources/drawable-resource.html#Shape

et ci-dessous il y a une note.

Remarque Chaque rayon doit (initialement) avoir un rayon supérieur à 1, sinon aucun coin n'est arrondi. Si vous souhaitez que certains coins ne soient pas arrondis, vous devez utiliser Android: rayon pour définir un rayon de coin par défaut supérieur à 1, puis remplacez chaque coin par les valeurs souhaitées, en indiquant zéro ("0dp" ) où vous ne voulez pas de coins arrondis.

1
lightman1988

Créez roung_top_corners.xml sur drawable et copiez le code ci-dessous

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" >
<corners
    Android:topLeftRadius="22dp"
    Android:topRightRadius="22dp"
    Android:bottomLeftRadius="0dp"
    Android:bottomRightRadius="0dp"
    />
<gradient
    Android:angle="180"
    Android:startColor="#1d2b32"
    Android:centerColor="#465059"
    Android:endColor="#687079"
    Android:type="linear" />
<padding
    Android:left="0dp"
    Android:top="0dp"
    Android:right="0dp"
    Android:bottom="0dp"
    />
<size
    Android:width="270dp"
    Android:height="60dp"
    /></shape>
1
Manoj Reddy