Спеціальна кнопка кола


187

Я хочу створити спеціальну кнопку, і мені потрібно, щоб це було коло. Як можна створити кнопку кола? Я не думаю, що це можливо з draw9patch.

Також я не знаю, як зробити спеціальну кнопку!

Чи є у вас якісь пропозиції?


вам потрібно розширити клас кнопок і перемогти метод onDraw.
Ешвін Н Бханушалі

2
але тут проблема, якщо я продовжую це, і користувач торкається поза кола, Onlcick буде називатися, як це вирішити.
Ата

чому ви просто не встановите зображення круглої форми як тло вашої кнопки?
MKJParekh

Я робив простий OnDrawn, він відображається на перегляді дизайну, але коли я хочу запустити додаток, це робить цю проблему при завантаженні: android.view.InflateException: Бінарний файл XML-файлу №52: Помилка надуття класу com.inaros.magicbox._customButtonPlay
Ата

Відповіді:


346

Використовуйте XML для малювання так:

Збережіть наступний вміст round_button.xmlу drawableпапці

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <shape android:shape="oval">
            <solid android:color="#fa09ad"/>
        </shape>
    </item>
    <item android:state_pressed="true">
        <shape android:shape="oval">
            <solid android:color="#c20586"/>
        </shape>
    </item>
</selector>

Android Матеріал Ефект: Хоча FloatingActionButtonце кращий варіант, якщо ви хочете зробити це з допомогою селектора XML, створити папку drawable-v21в resі зберегти іншу round_button.xmlтам з наступним XML

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#c20586">
    <item>
        <shape android:shape="oval">
            <solid android:color="#fa09ad"/>
        </shape>
    </item>
</ripple>

І встановіть його як фон Buttonу xml так:

<Button
android:layout_width="50dp"
android:layout_height="50dp"
android:background="@drawable/round_button"
android:gravity="center_vertical|center_horizontal"
android:text="hello"
android:textColor="#fff" />

Важливо:

  1. Якщо ви хочете, щоб у ньому відображалися всі ці стани (увімкнено, вимкнено, виділено тощо), ви будете використовувати селектор, як описано тут .
  2. Ви повинні зберігати обидва файли, щоб зробити зворотну сумісність назад. В іншому випадку ви зіткнетеся з дивними винятками в попередній версії Android.

Під папкою, що витягується, ви маєте на увазі відкрити папку з назвою "dravable" або зберегти її у dravable-mdpi, hdpi тощо тощо?
Jjang

@Jjang ні, вам просто потрібно зберегти його у папці "dravable", будь-який XML-ресурс для dravable зазвичай зберігається у "dravable", а не в mdpi, hdpi тощо.
Adil Soomro

K thx, у мене досі не було папки для малювання (лише mdpi, hdpi ... і -v21) :)
Jjang

PS Як надати кнопці колір пульсацій за замовчуванням? Як і сірий, який забарвлює всі кнопки в додатку за замовчуванням.
Jjang

@AdilSoomro мені потрібна ваша електронна адреса pls або надішліть мені пошту adilm717@gmail.com , adil від pak
Adiii

67

Маркуші написав віджет із кнопками кола з дивовижними ефектами. Натисніть тут !

введіть тут опис зображення


Як це використовувати з некруглим зображенням?
tomsoft

3
Лише вгору: бібліотека, пов'язана з цією відповіддю, тепер застаріла. Автор (Маркуші) рекомендує замість цього використовувати кнопку "Плаваюча дія" .
Відновіть Моніку

@ABoschman Чи можемо ми помістити текст у віджет кнопки кола? Або просто для
малюнків

@RuchirBaronia Я думаю, ви дійсно повинні розглянути FAB для Android. Скільки прози ви хочете розмістити всередині маленької круглої кнопки? Здається, зроблено для ікон. Перевірте: google.com/design/spec/components/…
відновіть Моніку

@ABoschman Привіт, але мені дуже подобається ефект цієї кнопки в цій бібліотеці. Чи є спосіб?
Ruchir Baronia


12

За допомогою офіційної бібліотеки матеріальних компонентів ви можете використовувати стиль MaterialButtonнанесення Widget.MaterialComponents.Button.Icon.

Щось на зразок:

   <com.google.android.material.button.MaterialButton
            android:layout_width="48dp"
            android:layout_height="48dp"
            style="@style/Widget.MaterialComponents.Button.Icon"
            app:icon="@drawable/ic_add"
            app:iconSize="24dp"
            app:iconPadding="0dp"
            android:insetLeft="0dp"
            android:insetTop="0dp"
            android:insetRight="0dp"
            android:insetBottom="0dp"
            app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MyApp.Button.Rounded"
            />

В даний час app:iconPadding="0dp", android:insetLeft, android:insetTop, android:insetRight, android:insetBottomатрибути необхідні для центрування значка на кнопці , уникаючи додаткову оббивку простору.

Використовуйте app:shapeAppearanceOverlayатрибут для отримання закруглених кутів. У цьому випадку у вас вийде коло.

  <style name="ShapeAppearanceOverlay.MyApp.Button.Rounded" parent="">
    <item name="cornerFamily">rounded</item>
    <item name="cornerSize">50%</item>
  </style>

Кінцевий результат:

введіть тут опис зображення


1
Дякую @Gabriele Mariotti Варто підкреслити необхідність app:iconPadding="0dp"у забезпеченні центральної піктограми. Я спалив купу часу, пробуючи центр, поки не знайшов цього. Здається, що у додатку: iconGravity відсутнє значення "центру".
scottyab

1
Дякую @Gabriele Mariotti Добре працюй для мене!
Androidz

2

якщо ви хочете використовувати VectorDrawable та ConstraintLayout

<FrameLayout
            android:id="@+id/ok_button"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:foreground="?attr/selectableItemBackgroundBorderless"
            android:background="@drawable/circle_button">
                <android.support.constraint.ConstraintLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                    <ImageView
                        android:id="@+id/icon_of_button"
                        android:layout_width="32dp"
                        android:layout_height="32dp"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintTop_toTopOf="parent"
                        app:layout_constraintRight_toRightOf="parent"
                        app:layout_constraintLeft_toLeftOf="parent"
                        app:srcCompat="@drawable/ic_thumbs_up"/>
                    <TextView
                        android:id="@+id/text_of_button"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        app:layout_constraintTop_toBottomOf="@+id/icon_of_button"
                        app:layout_constraintRight_toRightOf="parent"
                        app:layout_constraintLeft_toLeftOf="parent"
                        android:layout_marginTop="5dp"
                        android:textColor="@android:color/white"
                        android:text="ok"
                        />
                </android.support.constraint.ConstraintLayout>
            </FrameLayout>

фон кола: circle_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="1000dp" />
<solid android:color="#41ba7a" />
<stroke
    android:width="2dip"
    android:color="#03ae3c" />
<padding
    android:bottom="4dp"
    android:left="4dp"
    android:right="4dp"
    android:top="4dp" />
</shape>

2

Для FAB виглядає такий стиль на MaterialButton:

<com.google.android.material.button.MaterialButton
    style="@style/Widget.MaterialComponents.ExtendedFloatingActionButton"
    app:cornerRadius="28dp"
    android:layout_width="56dp"
    android:layout_height="56dp"
    android:text="1" />

Результат:

введіть тут опис зображення

Якщо ви змінюєте розмір, будьте обережні, використовуйте половину розміру кнопки як app:cornerRadius.

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