84 votes

Bouton arrondi dans Android

Je veux créer des boutons arrondis dans un programme Android. J'ai regardé Comment créer un EditText avec des coins arrondis ?

Ce que je veux réaliser est:

  1. Boutons à bords arrondis
  2. Changer l'arrière-plan/apparence du bouton sur différents états (comme Onclick, Focus)
  3. Utiliser mon propre PNG pour l'arrière-plan et ne pas créer une forme.

1 votes

0 votes

Google a de nouveaux cadres, de nouvelles technologies est meilleur Jetpack Compose

137voto

CSmith Points 6083

Vous pouvez créer un bouton avec des coins arrondis sans recourir à un ImageView.

Une ressource de sélecteur d'arrière-plan, button_background.xml:

Pour chaque état, une ressource drawable, par exemple button_press.xml:

Remarquez l'élément corners, cela vous donnera des coins arrondis !

Ensuite, définissez le drawable de fond sur le bouton :

android:background="@drawable/button_background"

MODIFICATION (9/2018) : La même technique peut être utilisée pour créer un bouton circulaire. Un cercle est vraiment juste un bouton carré avec une taille de rayon définie à la moitié du côté du carré

De plus, dans l'exemple ci-dessus, les éléments stroke et gradient ne sont pas nécessaires, ce sont juste des exemples et des moyens pour que vous puissiez voir la forme de coin arrondi

1 votes

CSMith. J'ai réussi à faire fonctionner le sélecteur. Je suis un peu confus par la deuxième partie quant à l'endroit où mettre le code. Est-ce que je crée un fichier xml séparé? Si oui, comment l'appeler? Je suppose que pour le bouton, je dois toujours définir son arrière-plan sur @drawable/button_background... Merci

0 votes

Oui, définissez l'arrière-plan sur button_background, et vous aurez un fichier xml pour chaque "état" de votre sélection, la deuxième partie est un exemple de button_press.xml.

1 votes

CSmith. Alors où ce fichier XML séparé est-il appelé. Dans l'exemple ci-dessus, vous avez défini l'arrière-plan sur un objet drawable et cela fonctionne bien pour modifier l'arrière-plan lors de l'interaction. Cependant, le bouton n'est pas arrondi à moins que vous ne créiez le png. avec des coins arrondis et utilisez neuf patchs pour éviter la distorsion.

87voto

Pir Fahim Shah Points 1786

Si vous avez besoin d'un bouton arrondi dans Android, créez alors un fichier XML "RoundShapeBtn.xml" en tant que drawable.

Ajoutez ceci à votre code de bouton :

android:background="@drawable/RoundShapeBtn"

1 votes

Est-ce que j'ajoute aussi le face de la police ici au cas où je veux que le texte du bouton soit d'une police particulière?

0 votes

@GarimaTiwari oui, vous pouvez faire cela et bien plus encore en matière de conception.

4 votes

En fait, vous obtenez une erreur de construction si vous nommez le fichier avec des majuscules dans le nom.. :)

18voto

Arunendra Points 1472

Créer un fichier xml dans le dossier drawable dans Android comme :

rounded_button.xml

     // si vous voulez une forme ronde claire, alors faites en sorte que la taille du rayon soit la moitié de la hauteur de votre bouton.
     // Couleur du bouton

Maintenant, utilisez ce fichier xml comme arrière-plan de vos boutons.

0 votes

C'est en fait ce que la plupart des gens cherchent. Bords rectangulaires très courbés et lisses. Comment puis-je ajouter une ombre sur le bouton ? Merci!

1 votes

Génial! Si quelqu'un est agacé de devoir créer des XML de bouton arrondi séparés pour obtenir différentes couleurs, vous pouvez supprimer le solid android:color du XML de dessin, et spécifier plutôt les couleurs en utilisant android:backgroundTint pour chaque Button

0 votes

@K_7 si vous faites cela, vous perdez l'élévation et l'ombre. suivez simplement celui-ci et vous obtiendrez une élévation et une ombre lorsque vous maintenez le bouton enfoncé.

6voto

Cody Caughlan Points 18780

Étendez ImageView comme ceci :

public class RoundedImageView extends ImageView {
  private static final String TAG = "RoundedImageView";

  private float mRadius = 0f;

  public RoundedImageView(Context context) {
    super(context);
  }

  public RoundedImageView(Context context, AttributeSet attrs) {
    super(context, attrs);

    // récupérer les attributs de styles
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RoundedView);
    mRadius = a.getDimension(R.styleable.RoundedView_radius, 0f);
    a.recycle();
  }

  @Override
  protected void onDraw(Canvas canvas) {
    // ne faire cela que si nous avons vraiment un rayon
    if(mRadius > 0) {
      RectF rect = new RectF(0, 0, getWidth(), getHeight());
      Path clipPath = new Path();
      clipPath.addRoundRect(rect, mRadius, mRadius, Path.Direction.CW);
      canvas.clipPath(clipPath);
    }
    super.onDraw(canvas);
  }
}

Et appliquez votre ressource d'arrière-plan normale et elle devrait être coupée avec des coins arrondis.

0 votes

Y a-t-il R.styleable.RoundedView_radius et R.styleable.RoundedView par défaut?

0 votes

Cody, comment puis-je visualiser le code source pour android.widget.imageview.class. Je continue de recevoir une demande pour attacher un fichier source car il ne peut pas être trouvé dans Eclipse.

0 votes

@Jib vous pouvez accéder au code source Android sur : source.android.com/source/downloading.html

4voto

Rohit Goyal Points 45

Cela peut être fait en utilisant l'attribut corner. Regardez le XML ci-dessous.

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