ปุ่มวงกลมที่กำหนดเอง


187

ฉันต้องการสร้างปุ่มที่กำหนดเองและฉันต้องการให้มันเป็นวงกลม ฉันจะสร้างปุ่มวงกลมได้อย่างไร ฉันไม่คิดว่าเป็นไปได้ด้วย draw9patch

นอกจากนี้ฉันไม่ทราบวิธีการทำปุ่มที่กำหนดเอง!

คุณมีข้อเสนอแนะใด ๆ ?


คุณต้องขยายคลาสของปุ่มและแทนที่เมธอด onDraw
Ashwin N Bhanushali

2
แต่ปัญหาอยู่ตรงนี้ถ้าผมขยายออกไปและผู้ใช้ออกนอกวงกลม Onlcick จะถูกเรียกวิธีการแก้ปัญหานี้
Ata

ทำไมคุณไม่ตั้งค่ารูปทรงกลมเป็นพื้นหลังเป็นปุ่ม?
MKJParekh

ฉันทำ OnDrawn ง่าย ๆ มันแสดงให้เห็นในมุมมองออกแบบ แต่เมื่อฉันต้องการเรียกใช้แอปพลิเคชันมันทำให้เกิดปัญหาในการโหลด: android.view.InflateException: บรรทัดไฟล์ XML แบบไบนารี # 52: ข้อผิดพลาดพองชั้น com.inaros.magicbox._customButtonPlay
Ata

คำตอบ:


346

ใช้ xml drawable ดังนี้:

บันทึกเนื้อหาต่อไปนี้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 รุ่นก่อนหน้า

คุณหมายถึงการเปิดโฟลเดอร์ชื่อ 'drawable' หรือเพื่อบันทึกใน drawable-mdpi, hdpi, etc ... ?
Jjang

@Jjang ไม่คุณเพียงแค่ต้องบันทึกลงในโฟลเดอร์ 'drawable' ทรัพยากร xml ใด ๆ สำหรับ drawable จะถูกบันทึกไว้ใน 'drawable' ไม่ได้อยู่ใน mdpi, hdpi ฯลฯ
Adil Soomro

K ขอบคุณผมไม่มีโฟลเดอร์ drawable จนถึงขณะนี้ (เฉพาะ mdpi, hdpi ... และ -v21) :)
Jjang

ป.ล. จะให้ปุ่มเป็นสีระลอกเริ่มต้นได้อย่างไร เช่นเดียวกับปุ่มสีเทาที่ระบายสีปุ่มทั้งหมดในแอปตามค่าเริ่มต้น
Jjang

@AdilSoomro ฉันต้องการที่อยู่อีเมลของคุณกรุณาหรือส่งอีเมลฉันadilm717@gmail.com , adil จาก pak
Adiii

67

Markushi เขียนวิดเจ็ตปุ่มวงกลมที่มีเอฟเฟกต์ที่น่าทึ่ง คลิกที่นี่ !

ป้อนคำอธิบายรูปภาพที่นี่


วิธีการใช้สิ่งนี้กับภาพที่ไม่เป็นวงกลม?
tomsoft

3
เพียงแค่หัวค่ำ: ห้องสมุดที่เชื่อมโยงในคำตอบนี้เลิกใช้แล้ว ผู้เขียน (Markushi) แนะนำให้ใช้ปุ่มการกระทำลอยแทน
Reinstate Monica

@ABoschman เราสามารถใส่ข้อความในวิดเจ็ตปุ่มวงกลมได้หรือไม่? หรือเพียงแค่วาดได้
Ruchir Baronia

@RuchirBaronia ฉันคิดว่าคุณควรพิจารณา Android FAB คุณต้องการวางร้อยแก้วในปุ่มกลมขนาดเล็กเท่าใด ดูเหมือนว่าจะสร้างไอคอน ลองดู: google.com/design/spec/components/…
Reinstate Monica

@ABoschman เฮ้ แต่ฉันชอบผลของปุ่มนี้ในห้องสมุดนี้ มีวิธีใดบ้าง
Ruchir Baronia

22

AngryTool สำหรับปุ่ม android ที่กำหนดเอง

คุณสามารถสร้างปุ่ม android แบบกำหนดเองได้ด้วยเว็บไซต์เครื่องมือนี้ ... ฉันสร้างปุ่มวงกลมและสี่เหลี่ยมจัตุรัสที่มีมุมกลมด้วยเครื่องมือไซต์นี้ .. เยี่ยมชมฉันอาจช่วยฉันได้


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คุณลักษณะที่มีความจำเป็นไปยังศูนย์ไอคอนบนปุ่มหลีกเลี่ยงพื้นที่ padding พิเศษ

ใช้แอ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หากคุณเปลี่ยนขนาดต้องระมัดระวังในการใช้ครึ่งหนึ่งของขนาดปุ่มเป็น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.