Wie zeichne ich ein abgerundetes Rechteck in der Android-Benutzeroberfläche?

141

Ich muss ein abgerundetes Rechteck in der Android-Benutzeroberfläche zeichnen. Das gleiche abgerundete Rechteck für TextViewund EditTextwäre auch hilfreich.

MAMurali
quelle
Schauen Sie sich diese Diskussion an stackoverflow.com/questions/3646415/…
Kartik Domadiya
Zumindest sollten Sie das Bild setzen .. denn wenn jemand nach der gleichen Frage sucht, wird es leicht zu verstehen sein.
Himanshu Mori

Antworten:

215

Gehen Sie in Ihrem Layout-XML wie folgt vor:

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

Durch Ändern von android:radiuskönnen Sie den "Radius" der Ecken ändern.

<solid> wird verwendet, um die Farbe des Zeichens zu definieren.

Sie können verwenden ersetzen android:radiusmit android:bottomLeftRadius, android:bottomRightRadius, android:topLeftRadiusund android:topRightRadiusfür jeden Eckenradius zu definieren.

Andreass
quelle
Sie fragten nicht nach einem Gefälle. Ich weiß nicht, warum diese Antwort akzeptiert wird.
Jerry Destremps
Ich denke, es wurde akzeptiert, weil es einige Monate vor den meisten anderen Antworten da war. Ich habe seit Jahren keine Android-Entwicklung mehr durchgeführt, daher habe ich keine Ahnung, wie die Antwort jetzt geändert oder aktualisiert werden könnte, um den Farbverlauf zu entfernen, obwohl ich davon ausgehe, dass das "solide" Tag, wie es in der Antwort von Noundla Sandeep unten verwendet wird, wahrscheinlich ausreichen würde der Trick.
Andreass
125

Ich denke, das ist genau das, was du brauchst.

Hier zeichnbare (XML) Datei, die ein abgerundetes Rechteck erstellt. 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>

Hier Layoutdatei: 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>

-> Im obigen Code hat LinearLayout den Hintergrund (Dies ist die Schlüsselrolle beim Erstellen eines abgerundeten Rechtecks). Sie können also jede Ansicht wie TextView, EditText ... in diesem LinearLayout platzieren, um den Hintergrund als rundes Rechteck für alle anzuzeigen.

Noundla Sandeep
quelle
1
Gibt es eine Möglichkeit, dies zu abstrahieren? Ich möchte android:background="@drawable/round_rect_shape"in meiner styles.xml verwenden können, aber andere Hintergrundfarben verwenden, indem ich eine andere Eigenschaft festlege. Gibt es eine andere Option, als für jede Farbe ein identisches Zeichenelement zu erstellen?
Karl
Auf diese Weise können Sie jede Form abgerundet machen!
Sabri Meviş
22

In monodroidkönnen Sie dies für abgerundete Rechtecke tun und diese dann als übergeordnete Klasse editboxbeibehalten. Weitere Layoutfunktionen können hinzugefügt werden.

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



       }  
    }
}
learn_andrd
quelle
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>

Nun, in welchem ​​Element Sie diese Form verwenden möchten, fügen Sie einfach hinzu: android:background="@drawable/custom_round_ui_shape"

Erstellen Sie eine neue XML-Datei mit dem Namen "custom_round_ui_shape".

Uttam Meerwal
quelle
1

Verwenden Sie CardView für rundes Rechteck. CardView bietet mehr Funktionen wie cardCornerRadius, cardBackgroundColor, cardElevation und viele mehr. Mit CardView ist die Benutzeroberfläche besser geeignet als mit benutzerdefinierten runden Rechtecken.

Jack Franchi
quelle
1

Sie können einfach einen neuen XML-Hintergrund im Ordner drawables definieren

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

Fügen Sie es anschließend einfach in Ihre Textansicht oder Ihren EditText ein, indem Sie es im Hintergrund definieren.

<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" />
Ibrahim117
quelle
0

Klicken Sie mit der rechten Maustaste auf die Zeichnungsdatei und erstellen Sie eine neue Layout-XML-Datei im Namen von beispielsweise button_background.xml. Kopieren Sie dann den folgenden Code und fügen Sie ihn ein. Sie können es nach Bedarf ändern.

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

Jetzt können Sie es verwenden.

<Button
android:background="@drawable/button_background"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
M Karimi
quelle
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>
Artemiy
quelle
Bitte erläutern Sie Ihre Antwort
ausführbare