Come disegnare un rettangolo arrotondato nell'interfaccia utente di Android?


141

Devo disegnare un rettangolo arrotondato nell'interfaccia utente di Android. Avere lo stesso rettangolo arrotondato per TextViewe EditTextsarebbe anche utile.


Date un'occhiata a questa discussione stackoverflow.com/questions/3646415/...
Kartik Domadiya

almeno dovresti mettere la foto .. perché se qualcuno sta cercando la stessa domanda di quanto sarà facile da capire.
Himanshu Mori

Risposte:


215

Nel layout xml, procedi come segue:

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

Modificando android:radiusè possibile modificare la quantità di "raggio" degli angoli.

<solid> è usato per definire il colore del disegno.

È possibile utilizzare sostituirlo android:radiuscon android:bottomLeftRadius, android:bottomRightRadius, android:topLeftRadiuse android:topRightRadiusper definire il raggio per ogni angolo.


Non hanno chiesto un gradiente. Non so perché questa è una risposta accettata.
Jerry Destremps,

Immagino sia stato accettato perché era lì diversi mesi prima della maggior parte delle altre risposte. Non ho fatto alcuno sviluppo Android per anni, quindi non ho idea di come la risposta possa essere cambiata o aggiornata ora per rimuovere il gradiente, anche se immagino che il tag "solido" usato nella risposta di Noundla Sandeep probabilmente farebbe il trucco.
Andreass,

125

Penso che questo sia esattamente necessario.

Qui file disegnabile (xml) che crea un rettangolo arrotondato. round_rect_shape.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>

Qui file di layout: 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>

-> Nel codice sopra, LinearLayout ha lo sfondo (Questo è il ruolo chiave da posizionare per creare un rettangolo arrotondato). Quindi puoi posizionare qualsiasi vista come TextView, EditText ... in quel LinearLayout per vedere lo sfondo come rettangolo rotondo per tutti.


1
C'è un modo per astrarre questo? Voglio essere in grado di utilizzare android:background="@drawable/round_rect_shape"nel mio styles.xml, ma di utilizzare colori di sfondo diversi impostando un'altra proprietà. C'è qualche opzione, tranne la creazione di un disegno identico per ogni colore?
karl,

Puoi rendere qualsiasi forma arrotondata in questo modo!
Sabri Meviş,

22

In monodroid, puoi fare così per il rettangolo arrotondato, e quindi mantenerlo come una classe genitore editboxe aggiungere altre funzionalità di layout.

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



       }  
    }
}

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

Ora, in quale elemento vuoi usare questa forma basta aggiungere: android:background="@drawable/custom_round_ui_shape"

Crea un nuovo XML in un disegno chiamato "custom_round_ui_shape"


1

Usa CardView per Round Rectangle. CardView offre più funzionalità come cardCornerRadius, cardBackgroundColor, cardElevation e molti altri. CardView rende l'interfaccia utente più adatta rispetto al disegno personalizzato Rettangolo rotondo.


1

Puoi semplicemente definire un nuovo sfondo XML nella cartella dei disegni

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

Dopodiché è sufficiente includerlo in TextView o EditText definendolo in background.

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

0

Fai clic con il pulsante destro del mouse sul disegno e crea un nuovo file xml di layout, ad esempio button_background.xml. quindi copia e incolla il seguente codice. Puoi cambiarlo secondo le tue necessità.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="14dp" />
<solid android:color="@color/colorButton" />
<padding
android:bottom="0dp"
android:left="0dp"
android:right="0dp"
android:top="0dp" />
<size
android:width="120dp"
android:height="40dp" />
</shape>

Ora puoi usarlo.

<Button
android:background="@drawable/button_background"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

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

Fornisci una spiegazione alla tua risposta
eseguibile il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.