Налаштування розміру піктограми плаваючої кнопки дії (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 \ dravable-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, щоб уникнути автоматичного розміру.


Можете чи ви пояснити або видалити посилання на який - небудь сайт, чому, наприклад , в витяжці-ІПЧР папка там _18dp.png, _24dp.png, _36dp.png, _48dp.png зображення.
вовахост

Я не розумію вашого запитання, є зображення 18dp, 24dp, 36dp та 48dp для зображень різного розміру.
Гаетан М.

Ви пам’ятаєте старі іконки Android_Design_Icon, які мали лише один варіант піктограми в папці hdpi, розміром 48px x 48px. Чому зараз у папці hdpi є 4 різні роздільні здатності для одного і того ж значка, тобто 27px x 27 px, 36px x 36px, 54px x 54px, 72px x 72px?
vovahost

1
ImageButton - це підклас ImageView, тому у вас є attribut scaleType, а шкала за замовчуванням - Type ScaleType.FIT_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
Це саме те, що мені було потрібно - просто і легко. Дякуємо за публікацію
Блістер-арахіс

1
Так. Це не працює з github.com/Clans/FloatingActionButton . Він працює, коли ви використовуєте андроїди FloatingActionButton
Abhishek

2
Так, але я не хочу робити це через додаток!
StarWind0

@ StarWind0 Мені потрібно використовувати атрибути fabSize та scaleType, якщо потрібно застосувати одну плаваючу кнопку дії. Я оновив свою відповідь.
Абхішек

110

Спробуйте використовувати app:maxImageSize="56dp"замість вищезазначених відповідей після оновлення бібліотеки підтримки до v28.0.0


1
Будь-який спосіб, ви не отримаєте цього в версії 28.0.0, ви отримаєте його в androidx.
Хемрайдж

1
Я не перейшов на AndroidX, це те, що я використовую: api 'com.android.support:design:28.0.0'
Робін

3
Це працювало для мене, але я хотів би отримати більше інформації, щоб зрозуміти, чому визначати maxIconSizeзміни розміру значка.
страмін

44

Існують три ключові атрибути XML для користувацьких FAB:

  • app:fabSize: Або "міні" (40dp), "normal" (56dp) (за замовчуванням) або "auto"
  • app:fabCustomSize: Це визначить загальний розмір FAB.
  • app:maxImageSize: Це визначить розмір піктограми.

Приклад:

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

Прокладка FAB (пробіл між піктограмою та фоновим колом, відомий також пульсацією ) обчислюється неявно шляхом:

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

Зауважте, що поля файлу можна встановити за допомогою звичайних android:marginвластивостей тегів xml.


27

Настанови щодо проектування визначають два розміри, і якщо немає вагомих причин відхилятися від використання будь-якого, розмір можна керувати fabSizeатрибутом XMLFloatingActionButton компонента.

Розглянемо визначення використання 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 , а розмір файлу - 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 і використовуєте нестандартний розмір файлу, вам доведеться вказати користувацький розмір, використовуючи

app:fabCustomSize="your custom size in dp"

При глухому розмірі розмір 56dp, і є ще одна варіація - це невеликий розмір файлу, який становить 40dp, якщо ви використовуєте що-небудь, вам доведеться вказати його для правильного розрахунку прокладки.


Це саме те, що я шукав! Вам навіть не потрібно встановлювати layout_widthі layout_height. Це просто працює. Це також доступноcom.android.support:design:28.0.0
PNDA

4

Як FABі ImageViewтак, ви можете використовувати scaleTypeатрибут, щоб змінити розмір піктограми також ImageView. Типовим scaleTypeдля a FABє fitCenter. Ви можете використовувати centerта centerInsideробити значки відповідно малі та великі.

Усі значення для scaleTypeатрибута - center, centerCrop, centerInside, fitCenter, fitEnd, fitStart, fitXYі matrix.

Докладнішу інформацію див. У розділі https://developer.android.com/reference/android/widget/ImageView.ScaleType.html .


3

вимкнено відповідь @ IRadha у налаштуваннях для малювання векторної форми android:height="_dp" та встановлення типу масштабу для android:scaleType="center" встановлення значення, що можна переглянути, до будь-якого розміру


2

Ви можете грати з такими налаштуваннями FloatingActionButton: android: scaleType та додаток: maxImageSize. Щодо мене, я отримав бажаний результат, якщо android: scaleType = "centerInside" та app: maxImageSize = "56dp".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.