165 votes

Comment dessiner un rectangle arrondi dans l'interface utilisateur d'Android ?

Je dois dessiner un rectangle arrondi dans l'interface utilisateur Android. Avoir le même rectangle arrondi pour TextView y EditText serait également utile.

0 votes

Jetez un coup d'œil à cette discussion stackoverflow.com/questions/3646415/

0 votes

Vous devriez au moins mettre l'image parce que si quelqu'un cherche la même question, ce sera facile à comprendre.

0 votes

Si vous voulez une précision supplémentaire, allez-y .

254voto

Andreass Points 810

Dans votre layout xml, faites ce qui suit :

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <solid android:color="@android:color/holo_red_dark" />

    <corners android:radius="32dp" />

</shape>

En modifiant le android:radius vous pouvez modifier le "rayon" des coins.

<solid> est utilisé pour définir la couleur du dessinable.

Vous pouvez utiliser le remplacement android:radius con android:bottomLeftRadius , android:bottomRightRadius , android:topLeftRadius y android:topRightRadius pour définir le rayon de chaque coin.

0 votes

Ils n'ont pas demandé de gradient. Je ne sais pas pourquoi cette réponse est acceptée.

0 votes

Je suppose qu'elle a été acceptée parce qu'elle était là plusieurs mois avant la plupart des autres réponses. Je n'ai pas fait de développement Android depuis des années, donc je n'ai aucune idée de la façon dont la réponse pourrait être modifiée ou mise à jour maintenant pour supprimer le dégradé, bien que je suppose que la balise "solid" telle qu'utilisée dans la réponse de Noundla Sandeep ci-dessous ferait probablement l'affaire.

126voto

noundla Points 649

Je pense que c'est exactement ce dont vous aviez besoin.

Voici un fichier drawable(xml) qui crée un rectangle arrondi. forme_rectangle_ronde.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <solid android:color="#ffffff" />

    <corners
        android:bottomLeftRadius="8dp"
        android:bottomRightRadius="8dp"
        android:topLeftRadius="8dp"
        android:topRightRadius="8dp" />

</shape>

Voici le fichier de mise en page : my_layout.xml

<LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/round_rect_shape"
    android:orientation="vertical"
    android:padding="5dp" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Something text"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:textColor="#ff0000" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <requestFocus />
    </EditText>
</LinearLayout>

-> Dans le code ci-dessus, LinearLayout ayant le fond (C'est le rôle clé à placer pour créer le rectangle arrondi). Ainsi vous pouvez placer n'importe quelle vue comme TextView, EditText... dans ce LinearLayout pour voir le fond comme un rectangle rond pour tous.

1 votes

Existe-t-il un moyen d'abstraire cela ? Je veux pouvoir utiliser android:background="@drawable/round_rect_shape" dans mon fichier styles.xml, mais pour utiliser différentes couleurs de fond en définissant une autre propriété. Y a-t-il une autre option que de créer un drawable identique pour chaque couleur ?

0 votes

Vous pouvez faire n'importe quelle forme arrondie avec cette méthode !

22voto

learn_andrd Points 398

En monodroid vous pouvez faire comme ceci pour le rectangle arrondi, et ensuite garder ceci comme classe parent, editbox et d'autres caractéristiques de mise en page peuvent être ajoutées.

 class CustomeView : TextView
    {
       public CustomeView (Context context, IAttributeSet ) : base (context, attrs)  
        {  
        }
       public CustomeView(Context context, IAttributeSet attrs, int defStyle) : base(context, attrs, defStyle)  
        {  
        }
       protected override void OnDraw(Android.Graphics.Canvas canvas)
       {
           base.OnDraw(canvas);
           Paint p = new Paint();
           p.Color = Color.White;
           canvas.DrawColor(Color.DarkOrange);

           Rect rect = new Rect(0,0,3,3);

           RectF rectF = new RectF(rect);

           canvas.DrawRoundRect( rectF, 1,1, p);

       }  
    }
}

4voto

Uttam Meerwal Points 243
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:padding="10dp"
  android:shape="rectangle">
    <solid android:color="@color/colorAccent" /> 
    <corners
      android:bottomLeftRadius="500dp"
      android:bottomRightRadius="500dp"
      android:topLeftRadius="500dp"
      android:topRightRadius="500dp" />
</shape>

Maintenant, dans quel élément vous voulez utiliser cette forme, il suffit d'ajouter : android:background="@drawable/custom_round_ui_shape"

Créez un nouveau XML dans la table de dessin nommé "custom_round_ui_shape".

2voto

Ibrahim117 Points 351

Vous pourriez simplement définir un nouveau fond xml dans le dossier drawables

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

Après cela, il suffit de l'inclure dans votre TextView ou EditText. en le définissant en arrière-plan.

<TextView
 android:id="@+id/textView"
 android:layout_width="0dp"
 android:layout_height="80dp"
 android:background="YOUR_FILE_HERE"
 Android:layout_weight="1"
 android:gravity="center"
 android:text="TEXT_HERE"
 android:textSize="40sp" />

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