Điều chỉnh kích thước biểu tượng của nút hành động nổi (fab)


172

Nút nổi Nút hành động nổi mới phải là 56dp x 56dp và biểu tượng bên trong nó phải là 24dp x 24dp . Vì vậy, khoảng cách giữa biểu tượng và nút nên là 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>

Và đây là kết quả tôi nhận được:
Kết quả nút nổi
Tôi đã sử dụng biểu tượng từ \ liệu-thiết kế-biểu tượng-1.0.0 \ nội dung \ drawable-hdpi \ ic_add_black_48dp.png https://github.com/google/m vật liệu-design-ions / release
/tag/1.0.1

Làm thế nào để làm cho kích thước của biểu tượng bên trong nút chính xác như được mô tả trong hướng dẫn?

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


Bản sao có thể có của: stackoverflow.com/a/59455009/3974530
InsaneCat

@InsaneCat Có lẽ cách khác vì câu hỏi bạn đề cập gần đây hơn câu hỏi của tôi.
vovahost

Câu trả lời:


184

Vì nội dung của bạn là 24dp x 24dp, bạn nên sử dụng biểu tượng 24dp . Và sau đó đặt android:scaleType="center"trong ImageButton của bạn để tránh tự động thay đổi kích thước.


Bạn có thể giải thích hoặc thả một liên kết đến một số trang web, tại sao ví dụ trong thư mục drawable-hdpi có các hình ảnh _18dp.png, _24dp.png, _36dp.png, _48dp.png.
vovahost

Tôi không hiểu câu hỏi của bạn, có 18dp, 24dp, 36dp và 48dp cho các hình ảnh kích thước khác nhau.
Gaëtan M.

Bạn có nhớ Android_Design_Icons cũ chỉ có một biến thể của biểu tượng trong thư mục hdpi là 48px x 48px. Tại sao bây giờ trong thư mục hdpi có 4 độ phân giải khác nhau cho cùng một biểu tượng, tức là 27px x 27 px, 36px x 36px, 54px x 54px, 72px x 72px?
vovahost

1
ImageButton là một lớp con của ImageView, do đó bạn có một thuộc tính scaleType và scaleType mặc định là ScaleType.FIT_CENTER
Gaëtan M.

4
Không còn hoạt động với com.android.support:support-v4:28.0.0-rc01
StarWind0

116

Làm cho mục này trong mờ

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

Ở đây 36dp là kích thước biểu tượng trên nút dấu phẩy động. Điều này sẽ đặt kích thước 36dp cho tất cả các biểu tượng cho nút hành động nổi.

Cập nhật theo nhận xét

Nếu bạn muốn đặt kích thước biểu tượng thành Nút hành động nổi cụ thể, chỉ cần đi với các thuộc tính nút Hành động nổi như ứng dụng: fabSize = "bình thường" và android: scaleType = "centre".

  <!--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
Đây chỉ là những gì tôi cần - đơn giản và dễ dàng. Cảm ơn vì đăng.
Blisterpeanuts 21/07/2016

1
Đúng. Nó không hoạt động với github.com/Clans/FloatingActionButton . Nó hoạt động khi bạn đang sử dụng FloatingActionButton của Android
Abhishek

2
Yeaaaah nhưng tôi không muốn làm điều đó trên ứng dụng!
StarWind0

@ StarWind0 Tôi phải sử dụng các thuộc tính fabSize và scaleType nếu muốn áp dụng cho một nút hành động nổi duy nhất. Tôi đã cập nhật câu trả lời của tôi.
Abhishek

110

Hãy thử sử dụng app:maxImageSize="56dp"thay vì các câu trả lời ở trên sau khi bạn cập nhật thư viện hỗ trợ của mình lên v28.0.0


1
Dù sao đi nữa, bạn không có được điều này trong phiên bản 28.0.0, bạn sẽ có được nó trong androidx.
Khemraj

1
Tôi chưa chuyển sang AndroidX, đây là những gì tôi đang sử dụng: api 'com.android.support:design:28.0.0'
Robin

3
Điều này làm việc cho tôi nhưng tôi muốn biết thêm thông tin để hiểu tại sao xác định maxIconSizethay đổi kích thước biểu tượng.
stramin

44

Có ba thuộc tính XML chính cho FAB tùy chỉnh:

  • app:fabSize: Hoặc "mini" (40dp), "bình thường" (56dp) (mặc định) hoặc "tự động"
  • app:fabCustomSize: Điều này sẽ quyết định kích thước FAB tổng thể.
  • app:maxImageSize: Điều này sẽ quyết định kích thước biểu tượng.

Thí dụ:

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

Phần đệm FAB (khoảng trắng giữa biểu tượng và vòng tròn nền, còn gọi là gợn ) được tính ngầm định bởi:

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

Lưu ý rằng lề của fab có thể được đặt bằng các android:marginthuộc tính thẻ xml thông thường .


27

Các nguyên tắc thiết kế xác định hai kích thước và trừ khi có lý do chính đáng để sử dụng một trong hai, kích thước có thể được kiểm soát bằng fabSizethuộc tính XML của FloatingActionButtonthành phần.

Xem xét quy định cụ thể sử dụng một trong hai app:fabSize="normal"hoặc app:fabSize="mini", ví dụ như:

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

Với nền mà bạn đã cung cấp, kết quả ở nút bên dưới trên thiết bị của tôi (Nexus 7 2012)

nhập mô tả hình ảnh ở đây

Co vẻ tôt vơi tôi.


7
Tôi đặt phần đệm nhưng nó không làm gì cả. Và phần đệm bên phải sẽ là 16 dp chứ không phải 32dp
vovahost

10

Mục tiêu của bạn là gì?

Nếu đặt kích thước hình ảnh biểu tượng thành lớn hơn:

  1. Đảm bảo có kích thước hình ảnh lớn hơn kích thước mục tiêu của bạn (so you can set max image size for your icon)

  2. Kích thước hình ảnh biểu tượng mục tiêu của tôi là 84dp & kích thước fab là 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

Nếu bạn đang sử dụng androidx 1.0.0 và đang sử dụng kích thước fab tùy chỉnh, bạn sẽ phải chỉ định kích thước tùy chỉnh bằng cách sử dụng

app:fabCustomSize="your custom size in dp"

Bằng cách làm điếc kích thước là 56dp và có một biến thể khác là fab kích thước nhỏ là 40dp, nếu bạn đang sử dụng bất cứ thứ gì bạn sẽ phải chỉ định nó cho phần đệm được tính toán chính xác


Điều này thật đúng với gì mà tôi đã tìm kiếm! Bạn thậm chí không cần phải thiết lập layout_widthlayout_height. Nó chỉ hoạt động. Điều này cũng có sẵn vàocom.android.support:design:28.0.0
PNDA

4

Cũng FABgiống như ImageViewvậy Bạn có thể sử dụng scaleTypethuộc tính để thay đổi kích thước biểu tượng tương tự ImageView. Mặc định scaleTypecho một FABfitCenter. Bạn có thể sử dụng centercenterInside để làm cho biểu tượng nhỏ và lớn tương ứng.

Tất cả các giá trị cho scaleTypethuộc tính là - center, centerCrop, centerInside, fitCenter, fitEnd, fitStart, fitXYmatrix .

Xem https://developer.android.com/reference/android/widget/ImageView.ScaleType.html để biết thêm chi tiết.


3

tắt câu trả lời của @ IRadha trong cài đặt có thể vẽ vector android:height="_dp" và đặt loại tỷ lệ để android:scaleType="center" đặt mức có thể vẽ thành bất kỳ kích thước nào được đặt


2

Bạn có thể chơi với các cài đặt sau của FloatingActionButton: android: scaleType và app: maxImageSize. Đối với tôi, tôi đã có một kết quả mong muốn nếu android: scaleType = "centreInside" và ứng dụng: maxImageSize = "56dp".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.