Як намалювати округлий прямокутник в інтерфейсі Android?


141

Мені потрібно намалювати закруглений прямокутник в інтерфейсі Android. Маючи однаковий закруглений прямокутник для, TextViewа EditTextтакож було б корисно.


Подивіться на це обговорення stackoverflow.com/questions/3646415 / ...
Картік Domadiya

якнайменше, ви повинні поставити картинку .. тому що якщо хтось шукає те саме питання, це зрозуміти буде легко.
Хіманшу Морі

Відповіді:


215

У своєму макеті xml виконайте наступне:

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

Змінивши android:radiusви можете змінити кількість «радіусу» кутів.

<solid> використовується для визначення кольору малювального.

Ви можете використовувати замінити android:radiusз android:bottomLeftRadius, android:bottomRightRadius, android:topLeftRadiusі android:topRightRadiusвизначити радіус для кожного кута.


Вони не просили градієнта. Не знаю, чому це прийнята відповідь.
Джеррі Дестремпс

Я думаю, це було прийнято, тому що він був там за кілька місяців до більшості інших відповідей. Я не займався розробкою Android протягом багатьох років, тому не знаю, як відповідь можна змінити чи оновити зараз, щоб видалити градієнт, хоча я здогадуюсь, що "твердий" тег, який використовується у відповіді Noundla Sandeep нижче, ймовірно, зробить хитрість.
Andreass

125

Я думаю, це вам точно потрібно.

Тут малюється файл (xml), який створює округлий прямокутник. 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>

Тут файл макета: 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>

-> У наведеному вище коді LinearLayout, що має тло (Це ключова роль для створення округлого прямокутника). Таким чином, ви можете розмістити будь-який вид, наприклад TextView, EditText ..., у цьому LinearLayout, щоб побачити фон як круглий прямокутник для всіх.


1
Чи є спосіб це абстрагувати? Я хочу мати можливість використовувати android:background="@drawable/round_rect_shape"в моїх стилях.xml, але використовувати різні кольори фону, встановивши іншу властивість. Чи є якийсь варіант, крім створення однакового малювання для кожного кольору?
karl

Ви можете зробити будь-яку форму закругленою таким чином!
Сабри Мевіш

22

У цьому monodroidви можете зробити так, як для округлого прямокутника, а потім, зберігаючи це як батьківський клас, editboxта інші функції компонування можуть бути додані.

 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>

Тепер, у якому елементі ви хочете використовувати цю форму, просто додайте: android:background="@drawable/custom_round_ui_shape"

Створіть новий XML з можливим написом з назвою "custom_round_ui_shape"


1

Використовуйте CardView для круглого прямокутника. CardView надає більше функцій, таких як cardCornerRadius, cardBackgroundColor, cardElevation та багато іншого. CardView робить користувальницький інтерфейс більш підходящим, ніж призначений для малювання круглий прямокутник.


1

Ви можете просто визначити новий фон у форматі XML у папці «Малюнки»

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

Після цього просто включіть його у TextView або EditText, визначивши його у фоновому режимі.

<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

Клацніть правою кнопкою миші на зображуваному файлі та створіть новий файл формату xml у назві, наприклад, button_background.xml. потім скопіюйте та вставте наступний код. Ви можете змінити це відповідно до ваших потреб.

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

Тепер ви можете ним скористатися.

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

Будь ласка, надайте пояснення до своєї відповіді
виконуваний файл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.