Özel daire düğmesi


188

Özel düğme oluşturmak istiyorum ve bunun daire olması gerekiyor. Nasıl bir daire düğmesi oluşturabilirim? Bunun draw9patch ile mümkün olduğunu düşünmüyorum.

Ayrıca nasıl özel düğme yapmak bilmiyorum!

Hiç önerin var mı?


düğme sınıfını genişletmeniz ve onDraw yöntemini geçersiz kılmanız gerekir.
Ashwin N Bhanushali

2
ancak sorun bunu uzatırsam ve kullanıcı çemberin dışına dokunursa, Onlcick'in nasıl çözüleceği çağrılır.
Ata

Neden düğmenizin arka planını yuvarlak şekil olarak ayarlamıyorsunuz?
MKJParekh

Basit OnDrawn yaptım, Tasarım görünümünde gösteriyor, ancak uygulamayı çalıştırmak istediğimde, yükleme sırasında bu sorunu yapıyor: android.view.InflateException: İkili XML dosya satırı # 52: Sınıf com.inaros.magicbox._customButtonPlay şişirme hatası
Ata

Yanıtlar:


346

Bunun gibi xml çizilebilir kullanın:

Aşağıdaki içerikleri klasöre olduğu round_button.xmlgibi drawablekaydedin

<?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 Material Effect: Her ne kadar FloatingActionButtondaha iyi bir seçenek olsa da, xml seçiciyi kullanarak yapmak istiyorsanız, drawable-v21içinde bir klasör oluşturun resve başka bir round_button.xmlxml ile buraya kaydedin

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

Ve Buttonböyle xml'de arka plan olarak ayarlayın :

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

Önemli:

  1. Tüm bu durumları (etkin, devre dışı, vurgulanmış vb.) Göstermesini istiyorsanız, burada açıklandığı gibi seçiciyi kullanırsınız .
  2. Çekilebilir geriye dönük uyumlu hale getirmek için her iki dosyayı da saklamanız gerekir. Aksi takdirde, önceki android sürümünde garip istisnalarla karşılaşacaksınız.

Çekilebilir klasör ile 'çekilebilir' adlı bir klasörü açmak veya çekilebilir-mdpi, hdpi, vb. İçine kaydetmek mi istiyorsunuz?
Jjang

@Jjang hayır, sadece 'çekilebilir' klasörüne kaydetmeniz gerekir, çekilebilir için herhangi bir xml kaynağı genellikle mdpi, hdpi vb. Değil, 'çekilebilir' olarak kaydedilir
Adil Soomro

Ş thx, şimdiye kadar hiçbir çekilebilir klasör yoktu (sadece mdpi, hdpi ... ve -v21) :)
Jjang

PS Düğmeye varsayılan dalgalanma rengi nasıl verilir? Varsayılan olarak uygulamadaki tüm düğmeleri renklendiren gri gibi.
Jjang

@AdilSoomro ben e-posta adresinize ihtiyacınız pls veya bana adilm717@gmail.com , pak gelen adil
Adiii

67

Markushi inanılmaz efektlerle bir daire düğmesi widget'ı yazdı. Click burada !

resim açıklamasını buraya girin


Dairesel olmayan bir görüntü ile nasıl kullanılır?
tomsoft

3
Sadece bir uyarı: Bu cevaba bağlanan kütüphane artık kullanımdan kaldırıldı. Yazar (Markushi) bunun yerine bir Yüzen Eylem Düğmesi kullanılmasını önerir .
Monica'yı

@ABoschman Daire düğmesi widget'ına metin koyabilir miyiz? Ya da sadece çekilebilir malzemeler için
Ruchir Baronia

@RuchirBaronia Bence gerçekten Android FAB düşünmelisiniz. Küçük bir yuvarlak düğmeye ne kadar düzyazı koymak istiyorsunuz? Simgeler için yapılmış gibi görünüyor.
Şuna bakın

@ABoschman Hey, ama bu kütüphanedeki bu düğmenin etkisini gerçekten seviyorum. Herhangi bir yol var mı?
Ruchir Baronia


12

Resmi Malzeme Bileşenleri kütüphanesi ile MaterialButtonbir Widget.MaterialComponents.Button.Iconstil uygulayabilirsiniz .

Gibi bir şey:

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

Şu anda app:iconPadding="0dp", android:insetLeft, android:insetTop, android:insetRight, android:insetBottomnitelikleri ilave dolgu alanı kaçınarak butonuna simgeyi ortalamak için gereklidir.

app:shapeAppearanceOverlayKöşeleri yuvarlatılmış hale getirmek için özelliği kullanın . Bu durumda bir daireniz olacak.

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

Nihai sonuç:

resim açıklamasını buraya girin


1
Teşekkürler @Gabriele Mariotti. app:iconPadding="0dp"Simgenin ortalandığından emin olmanın gerekliliğini vurgulamaya değer . Bunu bulana kadar bir sürü zaman merkezi denedim. Görünüşe göre bu uygulama: iconGravity'de bir "merkez" değeri eksik.
scottyab

1
Teşekkürler @Gabriele Mariotti. Benim için iyi çalış!
Androidz

2

VectorDrawable ve ConstraintLayout'u kullanmak istiyorsanız

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

daire arka planı: 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

Bir FAB görünümlü düğme için bu stil 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" />

Sonuç:

resim açıklamasını buraya girin

Boyutu değiştirirseniz düğme boyutunun yarısını olarak kullanmaya dikkat edin app:cornerRadius.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.