¿Cómo dibujar un rectángulo redondeado en la interfaz de usuario de Android?

141

Necesito dibujar un rectángulo redondeado en la interfaz de usuario de Android. Tener el mismo rectángulo redondeado para TextViewy EditTexttambién sería útil.

MAMurali
fuente
Echa un vistazo a esta discusión stackoverflow.com/questions/3646415/…
Kartik Domadiya
al menos deberías poner la imagen ... porque si alguien está buscando la misma pregunta, será fácil de entender.
Himanshu Mori

Respuestas:

215

En su diseño xml haga lo siguiente:

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

Al cambiar el android:radiuspuede cambiar la cantidad de "radio" de las esquinas.

<solid> se utiliza para definir el color del dibujable.

Puede utilizar reemplazar android:radiuscon android:bottomLeftRadius, android:bottomRightRadius, android:topLeftRadiusy android:topRightRadiuspara definir el radio de cada esquina.

Andreass
fuente
No pidieron un gradiente. No sé por qué se acepta esta respuesta.
Jerry Destremps
Supongo que fue aceptado porque estuvo allí varios meses antes que la mayoría de las otras respuestas. No he realizado ningún desarrollo de Android durante años, por lo que no tengo idea de cómo se podría cambiar o actualizar la respuesta ahora para eliminar el gradiente, aunque supongo que la etiqueta "sólida" como se usa en la respuesta de Noundla Sandeep a continuación probablemente funcionaría el truco.
Andreass
125

Creo que esto es exactamente lo que necesitas.

Aquí archivo dibujable (xml) que crea un rectángulo redondeado. 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>

Aquí archivo de diseño: 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>

-> En el código anterior, LinearLayout tiene el fondo (esa es la función clave para crear un rectángulo redondeado). Por lo tanto, puede colocar cualquier vista como TextView, EditText ... en ese LinearLayout para ver el fondo como un rectángulo redondo para todos.

Noundla Sandeep
fuente
1
¿Hay alguna manera de abstraer esto? Quiero poder usar android:background="@drawable/round_rect_shape"mi styles.xml, pero usar diferentes colores de fondo configurando otra propiedad. ¿Hay alguna opción excepto crear un dibujo idéntico para cada color?
karl
¡Puedes hacer cualquier forma redondeada de esta manera!
Sabri Meviş
22

En monodroid, puede hacer esto para un rectángulo redondeado, y luego mantener esto como una clase principal, editboxy se pueden agregar otras características de diseño.

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

Ahora, en qué elemento quieres usar esta forma solo agrega: android:background="@drawable/custom_round_ui_shape"

Cree un nuevo XML en dibujable llamado "custom_round_ui_shape"

Uttam Meerwal
fuente
1

Use CardView para el rectángulo redondo. CardView ofrece más funciones como cardCornerRadius, cardBackgroundColor, cardElevation y muchas más. CardView hace que la interfaz de usuario sea más adecuada que el rectángulo redondo personalizado dibujable.

Jack Franchi
fuente
1

Simplemente podría definir un nuevo fondo xml en la carpeta dibujables

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

Después de esto, simplemente inclúyalo en TextView o EditText definiéndolo en segundo plano.

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

Haga clic con el botón derecho en el dibujo y cree un nuevo archivo xml de diseño a nombre de, por ejemplo, button_background.xml. luego copie y pegue el siguiente código. Puede cambiarlo según su necesidad.

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

Ahora puedes usarlo.

<Button
android:background="@drawable/button_background"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
M Karimi
fuente
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
fuente
Proporcione alguna explicación a su respuesta
ejecutable el