550 votes

Comment arrondir les coins d'un bouton ?

Je veux faire les coins d'un button rond. Existe-t-il un moyen simple de réaliser cela dans Android ?

2 votes

1 votes

material.io/develop/Android/components/material-button il suffit de définir le rayon de l'angle

22 votes

Il ne s'agit pas d'une question générale, mais d'une question tout à fait pertinente. La qualifier de "trop générale" n'est qu'une mentalité d'OS qui doit être changée. Arrêtez d'être des dictateurs.

734voto

Si vous voulez quelque chose comme ceci

Button preview

Voici le code.

Créez un fichier xml dans votre dossier drawable comme mybutton.xml et collez les balises suivantes :

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" >
        <shape android:shape="rectangle"  >
            <corners android:radius="3dip" />
            <stroke android:width="1dip" android:color="#5e7974" />
            <gradient android:angle="-90" android:startColor="#345953" android:endColor="#689a92"  />            
        </shape>
    </item>
    <item android:state_focused="true">
        <shape android:shape="rectangle"  >
            <corners android:radius="3dip" />
            <stroke android:width="1dip" android:color="#5e7974" />
            <solid android:color="#58857e"/>       
        </shape>
    </item>  
    <item >
       <shape android:shape="rectangle"  >
            <corners android:radius="3dip" />
            <stroke android:width="1dip" android:color="#5e7974" />
            <gradient android:angle="-90" android:startColor="#8dbab3" android:endColor="#58857e" />            
       </shape>
    </item>
</selector>

Utilisez maintenant ce dessinable pour l'arrière-plan de votre vue. Si la vue est un bouton, alors quelque chose comme ceci :

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="10dp"
    android:textColor="#ffffff"
    android:background="@drawable/mybutton"
    android:text="Buttons" />

0 votes

Il s'est écrasé : Causé par : org.xmlpull.v1.XmlPullParserException : Binary XML file line #24 : <item> tag requires a 'drawable' attribute or child tag defining a drawable.

0 votes

Qu'est-ce qui crée l'ombre au clic ? j'essaie de réduire la largeur de l'ombre en bas... sans succès

0 votes

Je ne vois pas ce que montrer comment les sélecteurs sont codés a à voir avec expliquer comment les coins des boutons devraient être codés.

379voto

Sandip Jadhav Points 2730

Créez un fichier xml dans le dossier drawable comme ci-dessous

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="10dp">
    <!-- you can use any color you want I used here gray color-->
    <solid android:color="#ABABAB"/> 
    <corners android:radius="10dp"/>
</shape>

Appliquez-le comme arrière-plan au bouton dont vous voulez arrondir les angles.

Ou vous pouvez utiliser un rayon séparé pour chaque coin comme ci-dessous

android:bottomRightRadius="10dp"
android:bottomLeftRadius="10dp"
android:topLeftRadius="10dp"
android:topRightRadius="10dp"

62 votes

Vous pouvez simplement raccourcir les angles en Android:radius="10dp", ce qui s'appliquera à toutes les

27 votes

Cette solution n'est pas complète car elle ne prend pas en charge les différents états des boutons (appuyé, ciblé, par défaut). Pour une meilleure solution, voir stackoverflow.com/questions/9334618/bouton arrondi-Android

3 votes

@BenSimpson, vous verrez qu'il y a une différence dans la forme lorsque vous mettez juste cette ligne au lieu de définir chacun des rayons d'angle individuellement.

34voto

Almostafa Points 46

Créer shape.xml dans le dossier drawable

comme shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
  <stroke android:width="2dp"
    android:color="#FFFFFF"/>
  <gradient 
    android:angle="225"
    android:startColor="#DD2ECCFA"
    android:endColor="#DD000000"/>
<corners
    android:bottomLeftRadius="7dp"
    android:bottomRightRadius="7dp"
    android:topLeftRadius="7dp"
   android:topRightRadius="7dp" />
</shape>

et dans myactivity.xml

vous pouvez utiliser

<Button
    android:id="@+id/btn_Shap"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:text="@string/Shape"
    android:background="@drawable/shape"/>

12voto

AntonioSanchez Points 5

Le moyen le plus simple que j'ai trouvé est de créer un nouveau fichier xml dans le dossier drawable et de faire pointer l'arrière-plan des boutons vers ce fichier xml. voici le code que j'ai utilisé :

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">

<solid android:color="#ff8100"/>
<corners android:radius="5dp"/>

</shape>

3 votes

Pour restaurer l'effet d'ondulation du thème Material dans l'arrière-plan personnalisable, ajoutez android:foreground="?attr/selectableItemBackground" dans la vue des boutons. Voir stackoverflow.com/questions/38327188/

4voto

Mark Allison Points 10123

Si vous utilisez des tableaux vectoriels, il vous suffit de spécifier un élément <corners> dans la définition de votre tableau. J'ai couvert ceci dans un article de blog .

Si vous utilisez des images bitmap / 9-patch, vous devrez créer les coins avec transparence dans l'image bitmap.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X