Làm cách nào để vẽ hình chữ nhật tròn trong giao diện người dùng Android?


141

Tôi cần vẽ một hình chữ nhật tròn trong giao diện người dùng Android. Có cùng hình chữ nhật tròn cho TextViewEditTextcũng sẽ hữu ích.


Hãy nhìn vào cuộc thảo luận này stackoverflow.com/questions/3646415/...
Kartik Domadiya

Ít nhất bạn nên đặt hình ảnh .. bởi vì nếu ai đó đang tìm kiếm cùng một câu hỏi hơn nó sẽ dễ hiểu.
Himanshu Mori

Câu trả lời:


215

Trong bố cục của bạn xml làm như sau:

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

Bằng cách thay đổi, android:radiusbạn có thể thay đổi số lượng "bán kính" của các góc.

<solid> được sử dụng để xác định màu sắc của drawable.

Bạn có thể sử dụng thay thế android:radiusvới android:bottomLeftRadius, android:bottomRightRadius, android:topLeftRadiusandroid:topRightRadiusđể xác định bán kính cho mỗi góc.


Họ đã không yêu cầu một độ dốc. Không biết tại sao điều này được chấp nhận câu trả lời.
Jerry Destremps

Tôi đoán nó đã được chấp nhận bởi vì nó đã ở đó vài tháng trước hầu hết các câu trả lời khác. Tôi đã không thực hiện bất kỳ sự phát triển Android nào trong nhiều năm, vì vậy tôi không biết làm thế nào câu trả lời có thể được thay đổi hoặc cập nhật ngay bây giờ để xóa gradient, mặc dù tôi đoán thẻ "solid" như được sử dụng trong câu trả lời của Noundla Sandeep dưới đây có thể sẽ làm được mánh khóe
Andreas

125

Tôi nghĩ rằng, đây là bạn chính xác cần thiết.

Ở đây tệp drawable (xml) tạo hình chữ nhật tròn. 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>

Đây là tệp bố cục: 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>

-> Trong đoạn mã trên, linearLayout có nền (Đó là vai trò chính cần đặt để tạo hình chữ nhật tròn). Vì vậy, bạn có thể đặt bất kỳ chế độ xem nào như TextView, EditText ... trong linearLayout đó để xem nền là hình chữ nhật tròn cho tất cả.


1
Có cách nào để trừu tượng hóa điều này? Tôi muốn có thể sử dụng android:background="@drawable/round_rect_shape"trong tệp XML của mình, nhưng sử dụng các màu nền khác nhau bằng cách đặt thuộc tính khác. Có tùy chọn nào ngoại trừ việc tạo một drawable giống hệt nhau cho mỗi màu không?
karl

Bạn có thể làm cho bất kỳ hình dạng tròn với cách này!
Sabri Meviş

22

Trong monodroid, bạn có thể làm như thế này cho hình chữ nhật tròn, và sau đó giữ nó như một lớp cha editboxvà các tính năng bố trí khác có thể được thêm và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);



       }  
    }
}

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>

Bây giờ, trong phần tử bạn muốn sử dụng hình dạng này, chỉ cần thêm: android:background="@drawable/custom_round_ui_shape"

Tạo một XML mới trong drawable có tên "custom_round_ui_shape"


1

Sử dụng CardView cho hình chữ nhật tròn. CardView cung cấp nhiều chức năng hơn như cardCornerRadius, cardBackgroundColor, cardElevation và nhiều hơn nữa. CardView làm cho UI phù hợp hơn sau đó có thể vẽ hình chữ nhật tròn tùy chỉnh.


1

Bạn chỉ có thể xác định nền xml mới trong thư mục 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>  

Sau này, chỉ cần đưa nó vào TextView hoặc EditText của bạn bằng cách xác định nó trong nền.

<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

Right_click trên drawable và tạo tệp xml bố cục mới trong tên của ví dụ button_background.xml. sau đó sao chép và dán đoạn mã sau. Bạn có thể thay đổi nó theo nhu cầu của bạn.

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

Bây giờ bạn có thể sử dụng nó.

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

Vui lòng cung cấp một số lời giải thích cho câu trả lời của bạn
thực hiện được vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.