Округлая кнопка в Android - PullRequest
       13

Округлая кнопка в Android

66 голосов
/ 18 февраля 2012

Я хочу создать закругленные кнопки в программе Android. Я смотрел на Как создать EditText с закругленными углами?

Чего я хочу добиться:

  1. кнопки с закругленными краями
  2. Изменение фона / внешнего вида кнопки в разных состояниях (например, при нажатии, фокусе)
  3. Используйте мой собственный PNG для фона, а не создавайте фигуры.

Ответы [ 10 ]

117 голосов
/ 18 февраля 2012

Вы можете сделать кнопку с закругленными углами, не прибегая к ImageView.

Ресурс выбора фона, button_background.xml:

<?xml version="1.0" encoding="utf-8" ?> 
     <selector xmlns:android="http://schemas.android.com/apk/res/android">
     <!--  Non focused states 
      --> 
      <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/button_unfocused" /> 
      <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/button_unfocused" /> 
     <!--  Focused states 
      --> 
      <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/button_focus" /> 
      <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/button_focus" /> 
     <!--  Pressed 
      --> 
      <item android:state_pressed="true" android:drawable="@drawable/button_press" /> 
    </selector>

Для каждого состояния - доступный для использования ресурс, например, button_press.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
  <stroke android:width="1dp" android:color="#FF404040" /> 
  <corners android:radius="6dp" /> 
  <gradient android:startColor="#FF6800" android:centerColor="#FF8000" android:endColor="#FF9700" android:angle="90" /> 
</shape>

Обратите внимание на атрибут corners, это дает вам закругленные углы!

Затем установите фон для рисования на кнопке:

android:background="@drawable/button_background"

РЕДАКТИРОВАТЬ (9/2018) : ту же технику можно использовать для создания круглой кнопки. Круг - это просто квадратная кнопка с радиусом, равным 1/2 стороны квадрата

Кроме того, в приведенном выше примере stroke и gradient не являются необходимыми элементами, это всего лишь примеры и способы, которыми вы сможете увидеть форму закругленного угла

67 голосов
/ 14 декабря 2012

Если вам нужна закругленная кнопка в Android, создайте XML-файл «RoundShapeBtn.xml» для рисования.

 <?xml version="1.0" encoding="utf-8"?>
  <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="10dp">   
  <solid android:color="#6E6E6E"/> <!-- this one is ths color of the Rounded Button -->
  <corners
   android:bottomRightRadius="10dp"
   android:bottomLeftRadius="10dp"
   android:topLeftRadius="10dp"
   android:topRightRadius="10dp"/>
</shape>

Добавьте это к своему коду кнопки:

android:background="@drawable/RoundShapeBtn"
13 голосов
/ 13 февраля 2015

создать XML-файл в папке Drawable в Android, как:

rounded_button.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">

    <corners android:radius="20dp"/> // if you want clear round shape then make radius size is half of your  button`s height.
    <solid android:color="#EEFFFFFF"/> // Button Colour
    <padding
        android:bottom="5dp"
        android:left="10dp"
        android:right="10dp"
        android:top="5dp"/>

</shape>

Теперь этот XML-файл в качестве фона кнопок.

 <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="@drawable/rounded_button"
        android:text="@string/button_text"
        android:textColor="@color/black"/>
8 голосов
/ 18 февраля 2012

Google рекомендует не имитировать элементы пользовательского интерфейса с других платформ.Я бы не стал использовать закругленные кнопки в стиле iOS в приложении для Android.

5 голосов
/ 18 февраля 2012

Расширить ImageView примерно так:

public class RoundedImageView extends ImageView {
  private static final String TAG = "RoundedImageView";

  private float mRadius = 0f;

  public RoundedImageView(Context context) {
    super(context);
  }

  public RoundedImageView(Context context, AttributeSet attrs) {
    super(context, attrs);

    // retrieve styles attributes
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.RoundedView);
    mRadius = a.getDimension(R.styleable.RoundedView_radius, 0f);
    a.recycle();
  }

  @Override
  protected void onDraw(Canvas canvas) {
    // only do this if we actually have a radius
    if(mRadius > 0) {
      RectF rect = new RectF(0, 0, getWidth(), getHeight());
      Path clipPath = new Path();
      clipPath.addRoundRect(rect, mRadius, mRadius, Path.Direction.CW);
      canvas.clipPath(clipPath);
    }
    super.onDraw(canvas);
  }
}

И применить к нему свой обычный фоновый ресурс, и он должен быть обрезан закругленными углами.

3 голосов
/ 25 мая 2014

Это можно сделать с помощью атрибута угла. Посмотрите на ниже XML.

<item>
    <shape android:shape="rectangle" >
        <stroke
            android:height="1.0dip"
            android:width="1.0dip"
            android:color="#ffee82ee" />

        <solid android:color="#ffee82ee" />

        <corners
            android:bottomLeftRadius="102.0dip"
            android:bottomRightRadius="102.0dip"
            android:radius="102.0dip"
            android:topLeftRadius="102.0dip"
            android:topRightRadius="102.0dip" />
    </shape>
</item>

2 голосов
/ 16 августа 2014

Гораздо лучше поместить состояния и формы кнопок в 1 файл селектора XML. Это должно сделать ваше приложение работать быстрее / лучше. Попробуйте это (любезно предоставлено Введение в разработку приложений для Android). Не спамить здесь, просто показывая, что это не мой код.

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:state_pressed="true" >
    <shape android:shape="rectangle"  >
     <corners android:radius="12dip" />
     <stroke android:width="1dip" android:color="#333333" />
     <gradient android:angle="-90" android:startColor="#333333"      android:endColor="#555555"  />            
    </shape>
    </item>
    <item android:state_focused="true">
    <shape android:shape="rectangle"  >
     <corners android:radius="12dip" />
     <stroke android:width="1dip" android:color="#333333" />
     <solid android:color="#58857e"/>       
    </shape>
    </item>  
    <item >
    <shape android:shape="rectangle"  >
     <corners android:radius="12dip" />
     <stroke android:width="1dip" android:color="#333333" />
     <gradient android:angle="-90" android:startColor="#333333" android:endColor="#555555" />            
    </shape>
    </item>

    </selector>

Совет по дизайну P.S.: градиенты и прямоугольники с закругленными углами лучше всего использовать, когда трудно сказать, что они используются с умом.

1 голос
/ 19 июня 2018

Создать Drawable ресурс с именем btnOval -> затем мимо кода;

 <?xml version="1.0" encoding="utf-8"?>
      <shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="oval"  
android:padding="10dp">   
      <solid android:color="#6E6E6E"/> 
    </shape>

и пользователь внутри тега кнопки, как,

<Button
andorid:width=""
android:hieght=""
android:background="@Drawable/btnOval"
/>
1 голос
/ 05 марта 2018

Закругленные кнопки можно создавать, используя также форму кольца, см. http://www.zoftino.com/android-shape-drawable-examples

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:innerRadius="0dp"
    android:shape="ring"
    android:thickness="40dp"
    android:useLevel="false">
    <solid android:color="@color/colorPrimary" />
    <padding android:bottom="50dp"
        android:left="16dp"
        android:right="16dp"
        android:top="50dp"/>
</shape>
0 голосов
/ 03 июля 2019

Попробуйте приведенный ниже код Создайте нарисованный файл с именем циркуляр_button.xml и вставьте ниже

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#008577" />
<corners android:bottomRightRadius="100dp"
    android:bottomLeftRadius="100dp"
    android:topRightRadius="100dp"
    android:topLeftRadius="100dp"/>
</shape>

Затем измените фон кнопки на этот нарисованный файл

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

Если вы хотите кнопку полного круга, вы можете использовать приведенный ниже рисунок

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">

    <solid
        android:color="#008577"/>

    <size
        android:width="120dp"
        android:height="120dp"/>
</shape>
...