ปรับขนาดไอคอนของปุ่มการกระทำลอยตัว (fab)


172

ปุ่มลอย ใหม่ปุ่มการกระทำลอยควรจะ56dp x 56dpและไอคอนที่อยู่ภายในก็ควรจะ24dp x 24dp ดังนั้นช่องว่างระหว่างไอคอนและปุ่มที่ควรจะ16dp

<ImageButton
    android:id="@+id/fab_add"
    android:layout_width="56dp"
    android:layout_height="56dp"
    android:layout_gravity="bottom|right"
    android:layout_marginBottom="16dp"
    android:layout_marginRight="16dp"
    android:background="@drawable/ripple_oval"
    android:elevation="8dp"
    android:src="@drawable/ic_add_black_48dp" />

ripple_oval.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:colorControlHighlight">
    <item>
        <shape android:shape="oval">
            <solid android:color="?android:colorAccent" />
        </shape>
    </item>
</ripple>

และนี่คือผลลัพธ์ที่ฉันได้รับ:
ผลปุ่มลอย
ฉันใช้ไอคอนจาก\ material-design-icons-1.0.0 \ content \ drawable-hdpi \ ic_add_black_48dp.png
https://github.com/google/material-design-icons/releases /tag/1.0.1

วิธีที่จะทำให้ขนาดของไอคอนภายในปุ่มจะตรงตามที่อธิบายไว้ในหลักเกณฑ์?

http://www.google.com/design/spec/components/buttons.html#buttons-floating-action-button


สำเนาซ้ำที่เป็นไปได้ของ: stackoverflow.com/a/59455009/3974530
InsaneCat

@InsaneCat อาจเป็นวิธีอื่นเนื่องจากคำถามที่คุณพูดถึงนั้นไม่นานกว่าฉัน
vovahost

คำตอบ:


184

ในฐานะที่เป็นเนื้อหาของคุณ 24dp x 24dp คุณควรใช้24dp ไอคอน จากนั้นตั้งค่าandroid:scaleType="center"ใน ImageButton ของคุณเพื่อหลีกเลี่ยงการปรับขนาดอัตโนมัติ


คุณสามารถอธิบายหรือวางลิงค์ไปยังบางเว็บไซต์ได้หรือไม่ตัวอย่างเช่นในโฟลเดอร์drawable-hdpiมี _18dp.png, _24dp.png, _36dp.png, _48dp.png ภาพ
vovahost

ฉันไม่เข้าใจคำถามของคุณมี 18dp, 24dp, 36dp และ 48dp สำหรับภาพขนาดแตกต่างกัน
Gaëtan M.

คุณจำ Android_Design_Icons เก่าซึ่งมีไอคอนเพียงหนึ่งตัวแปรในโฟลเดอร์ hdpi ซึ่งเป็น 48px x 48px หรือไม่ ทำไมตอนนี้ในโฟลเดอร์ hdpi มีความละเอียดต่างกัน 4 แบบสำหรับไอคอนเดียวกันนั่นคือ 27px x 27 px, 36px x 36px, 54px x 54px, 72px x 72px?
vovahost

1
ImageButton เป็น subclass ของ ImageView ดังนั้นคุณมี scaleType ที่เกี่ยวข้องและ scaleType เริ่มต้นคือScaleTypeFIT_CENTER
Gaëtan M.

4
ไม่สามารถใช้งานกับ com.android.support:support-v4:28.0.0-rc01 ได้อีกต่อไป
StarWind0

116

ทำรายการนี้เป็นมิติ

<!--Floating action button-->
<dimen name="design_fab_image_size" tools:override="true">36dp</dimen>

ที่นี่ 36dp คือขนาดไอคอนบนปุ่มจุดลอย สิ่งนี้จะตั้งขนาด 36dp สำหรับไอคอนทั้งหมดสำหรับปุ่มการกระทำแบบลอย

ปรับปรุงตามความคิดเห็น

หากคุณต้องการตั้งค่าขนาดไอคอนเป็นปุ่มการกระทำแบบลอยตัวโดยเฉพาะให้ไปกับแอตทริบิวต์ปุ่มการกระทำแบบลอยตัวเช่นแอป: fabSize = "ปกติ" และ Android: scaleType = "ศูนย์"

  <!--app:fabSize decides size of floating action button You can use normal, auto or mini as per need-->
  app:fabSize="normal" 

  <!--android:scaleType decides how the icon drawable will be scaled on Floating action button. You can use center(to show scr image as original), fitXY, centerCrop, fitCenter, fitEnd, fitStart, centerInside.-->
  android:scaleType="center"

3
นี่คือสิ่งที่ฉันต้องการ - ง่ายและสะดวก ขอบคุณสำหรับการโพสต์
Blisterpeanuts

1
ใช่. มันไม่ได้ทำงานกับgithub.com/Clans/FloatingActionButton มันทำงานได้เมื่อคุณใช้ androids FloatingActionButton
Abhishek

2
ใช่แล้ว แต่ฉันไม่ต้องการทำข้ามแอพ!
StarWind0

@ StarWind0 ฉันต้องใช้แอตทริบิวต์ fabSize และ scaleType หากต้องการใช้สำหรับปุ่มการดำเนินการแบบลอยเดียว ฉันได้อัพเดตคำตอบแล้ว
Abhishek

110

ลองใช้app:maxImageSize="56dp"แทนคำตอบข้างต้นหลังจากคุณอัปเดตไลบรารีสนับสนุนเป็น v28.0.0


1
ไม่ว่าคุณจะไม่ได้รับรุ่น 28.0.0 คุณจะได้รับมันใน androidx
เขมราฐ

1
ฉันไม่ได้เปลี่ยนเป็น AndroidX นี่คือสิ่งที่ฉันใช้: api 'com.android.support:design:28.0.0'
Robin

3
สิ่งนี้ใช้ได้สำหรับฉัน แต่ฉันต้องการข้อมูลเพิ่มเติมเพื่อให้เข้าใจว่าทำไมการกำหนดmaxIconSizeขนาดไอคอนเปลี่ยนแปลง
Stramin

44

มีสามแอตทริบิวต์ XML ที่สำคัญสำหรับ FAB ที่กำหนดเอง:

  • app:fabSize: อาจเป็น "มินิ" (40dp), "ปกติ" (56dp) (ค่าเริ่มต้น) หรือ "อัตโนมัติ"
  • app:fabCustomSize: นี่จะเป็นตัวตัดสินขนาด FAB โดยรวม
  • app:maxImageSize: นี่จะเป็นตัวกำหนดขนาดของไอคอน

ตัวอย่าง:

app:fabCustomSize="64dp" 
app:maxImageSize="32dp"

ช่องว่างภายใน FAB (ช่องว่างระหว่างไอคอนและวงกลมพื้นหลังหรือที่รู้จักกันในชื่อripple ) ถูกคำนวณโดยนัยโดย:

4-edge padding = (fabCustomSize - maxImageSize) / 2.0 = 16

โปรดทราบว่าระยะขอบของ fab สามารถตั้งค่าได้โดยandroid:marginคุณสมบัติแท็ก xml ปกติ


27

แนวทางการออกแบบกำหนดสองขนาดและหากไม่มีเหตุผลที่ชัดเจนในการเบี่ยงเบนจากการใช้อย่างใดอย่างหนึ่งขนาดสามารถควบคุมได้ด้วยfabSizeคุณลักษณะ XML ของFloatingActionButtonส่วนประกอบ

พิจารณาการระบุโดยใช้อย่างใดอย่างหนึ่งapp:fabSize="normal"หรือapp:fabSize="mini"เช่น:

<android.support.design.widget.FloatingActionButton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:src="@drawable/ic_done_white_24px"
   app:fabSize="mini" />

15
<ImageButton
        android:background="@drawable/action_button_bg"
        android:layout_width="56dp"
        android:layout_height="56dp"
        android:padding="16dp"
        android:src="@drawable/ic_add_black_48dp"
        android:scaleType="fitXY"
        android:elevation="8dp"/>

ด้วยแบ็คกราวน์ที่คุณให้ไว้จะให้ผลลัพธ์เป็นปุ่มด้านล่างบนอุปกรณ์ของฉัน (Nexus 7 2012)

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

ดูดีกับผม.


7
ฉันตั้งช่องว่างภายใน แต่ไม่ทำอะไรเลย และช่องว่างภายในที่เหมาะสมคือ 16 dp ไม่ใช่ 32dp
vovahost

10

เป้าหมายของคุณคืออะไร

หากตั้งค่าขนาดภาพไอคอนเป็นใหญ่กว่า:

  1. ตรวจสอบให้แน่ใจว่ามีขนาดภาพใหญ่กว่าขนาดเป้าหมายของคุณ (so you can set max image size for your icon)

  2. ขนาดภาพไอคอนเป้าหมายของฉันคือ84dpและขนาด fab คือ112dp :

    <android.support.design.widget.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:src= <image here>
        app:fabCustomSize="112dp"
        app:fabSize="auto"
        app:maxImageSize="84dp" />

6

หากคุณใช้ androidx 1.0.0 และกำลังใช้ขนาด fab ที่กำหนดเองคุณจะต้องระบุขนาดที่กำหนดเองโดยใช้

app:fabCustomSize="your custom size in dp"

โดย deafult ขนาดคือ 56dp และมีรูปแบบอื่นที่เป็น fab ขนาดเล็กซึ่งเป็น 40dp ถ้าคุณใช้อะไรคุณจะต้องระบุให้ padding ถูกคำนวณอย่างถูกต้อง


นี่คือสิ่งที่ฉันกำลังมองหา! คุณไม่จำเป็นต้องแม้กระทั่งชุดและlayout_width layout_heightมันใช้งานได้ นอกจากนี้ยังมีในcom.android.support:design:28.0.0
PNDA

4

อย่างที่FABเป็นImageViewเพื่อให้คุณสามารถใช้แอตทริบิวต์การเปลี่ยนขนาดไอคอนเช่นเดียวกันscaleType ImageViewเริ่มต้นscaleTypeสำหรับเป็นFAB fitCenterคุณสามารถใช้centerและcenterInsideเพื่อทำให้ไอคอนเล็กและใหญ่ตามลำดับ

ค่าทั้งหมดสำหรับscaleTypeแอตทริบิวต์ - และcenter, centerCrop, centerInside, fitCenter, fitEnd, fitStart, fitXYmatrix

ดู https://developer.android.com/reference/android/widget/ImageView.ScaleType.htmlสำหรับรายละเอียดเพิ่มเติม


3

ออกจากคำตอบของ @ IRadha ในการตั้งค่า drawable เวกเตอร์android:height="_dp" และการตั้งค่าชนิดสเกลเพื่อandroid:scaleType="center" ตั้งค่า drawable ให้เป็นขนาดใดก็ได้


2

คุณสามารถเล่นกับการตั้งค่าต่อไปนี้ของ FloatingActionButton: android: scaleType และ app: maxImageSize สำหรับฉันฉันได้ผลลัพธ์ที่พึงประสงค์ถ้า android: scaleType = "centerInside" และแอพ: maxImageSize = "56dp"

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