Pulsante cerchio personalizzato


187

Voglio creare un pulsante personalizzato e ho bisogno che sia un cerchio. Come posso creare un pulsante circolare? Non penso che sia possibile con draw9patch.

Inoltre non so come creare un pulsante personalizzato!

Hai qualche suggerimento?


devi estendere la classe button e sovrascrivere il metodo onDraw.
Ashwin N Bhanushali,

2
ma il problema è qui se lo estendo, e l'utente tocca fuori dal cerchio, verrà chiamato Onlcick, come risolverlo.
Ata,

perché non hai appena impostato un'immagine di forma rotonda come sfondo del tuo pulsante?
MKJParekh

Ho fatto OnDrawn semplice, mostra in visualizzazione Progettazione, ma quando voglio eseguire l'applicazione, questo problema si presenta al caricamento: android.view.InflateException: file binario XML linea # 52: errore durante il gonfiaggio della classe com.inaros.magicbox._customButtonPlay
Ata,

Risposte:


346

Usa il disegno XML in questo modo:

Salvare i seguenti contenuti come round_button.xmlnella drawablecartella

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

Effetto Materiale Android: Anche se FloatingActionButtonè una scelta migliore, se si vuole farlo utilizzando il selettore xml, creare una cartella drawable-v21in rese salvare un altro round_button.xmllì con seguente codice 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>

E impostalo come sfondo di Buttonin xml in questo modo:

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

Importante:

  1. Se vuoi che mostri tutti questi stati (abilitato, disabilitato, evidenziato ecc.), Userai il selettore come descritto qui .
  2. Devi conservare entrambi i file per rendere il disegno compatibile con le versioni precedenti. Altrimenti, dovrai affrontare strane eccezioni nella precedente versione di Android.

Per cartella drawable intendete aprire una cartella denominata 'drawable' o salvarla in drawable-mdpi, hdpi, ecc ...?
Jjang,

@Jjang no, devi solo salvarlo nella cartella 'drawable', qualsiasi risorsa xml per drawable viene in genere salvata in 'drawable', non in mdpi, hdpi ecc.
Adil Soomro,

K thx, fino ad ora non avevo cartelle disegnabili (solo mdpi, hdpi ... e -v21) :)
Jjang

PS Come assegnare al pulsante un colore di ondulazione predefinito? Come quello grigio che sta colorando tutti i pulsanti nell'app per impostazione predefinita.
Jjang,

@AdilSoomro ho bisogno del tuo indirizzo e-mail pls o scrivimi adilm717@gmail.com , adil da pak
Adiii

67

Markushi ha scritto un widget pulsante cerchio con effetti sorprendenti. Clicca qui !

inserisci qui la descrizione dell'immagine


Come usarlo con un'immagine non circolare?
Tomsoft,

3
Solo un avvertimento: la libreria collegata in questa risposta è ora obsoleta. L'autore (Markushi) consiglia invece di utilizzare un pulsante di azione mobile .
Ripristina Monica il

@ABoschman Possiamo inserire del testo nel widget pulsante cerchio? O solo per i disegni
Ruchir Baronia,

@RuchirBaronia Penso che dovresti davvero prendere in considerazione il FAB Android. Quanta prosa vuoi mettere all'interno di un piccolo pulsante rotondo? Sembra fatto per le icone. Scopri: google.com/design/spec/components/…
Ripristina Monica

@ABoschman Ehi, ma mi piace molto l'effetto di questo pulsante in questa libreria. C'è un modo?
Ruchir Baronia,


12

Con la libreria ufficiale dei componenti materiali è possibile utilizzare l' MaterialButtonapplicazione di uno Widget.MaterialComponents.Button.Iconstile.

Qualcosa di simile a:

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

Attualmente il app:iconPadding="0dp", android:insetLeft, android:insetTop, android:insetRight, android:insetBottomgli attributi sono necessari per centrare l'icona sul pulsante evitando spazio chilo in più.

Utilizzare l' app:shapeAppearanceOverlayattributo per ottenere gli angoli arrotondati. In questo caso avrai un cerchio.

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

Il risultato finale:

inserisci qui la descrizione dell'immagine


1
Grazie @Gabriele Mariotti. Vale la pena sottolineare la necessità app:iconPadding="0dp"di assicurarsi che l'icona sia centrata. Ho passato un sacco di tempo a provare il centro finché non ho trovato questo. Sembra una svista quell'app: iconGravity non ha un valore "centrale".
scottyab,

1
Grazie @Gabriele Mariotti. Lavora bene per me!
Androidz,

2

se si desidera utilizzare VectorDrawable e 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>

sfondo del cerchio: 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

Per un pulsante dall'aspetto FAB questo stile su un 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" />

Risultato:

inserisci qui la descrizione dell'immagine

Se si modifica la dimensione, fare attenzione a utilizzare la metà della dimensione del pulsante come app:cornerRadius.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.