Sesuaikan ukuran ikon tombol tindakan Mengambang (luar biasa)

172

Tombol mengambang Tombol tindakan mengambang baru harus 56dp x 56dp dan ikon di dalamnya harus 24dp x 24dp . Jadi ruang antara ikon dan tombol harus 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>

Dan inilah hasil yang saya dapatkan:
Hasil tombol mengambang
Saya menggunakan ikon dari \ 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

Bagaimana cara membuat ukuran ikon di dalam tombol persis seperti yang dijelaskan dalam pedoman?

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

vovahost
sumber
Kemungkinan rangkap dari: stackoverflow.com/a/59455009/3974530
InsaneCat
@ InsaneCat Mungkin sebaliknya karena pertanyaan yang Anda sebutkan lebih baru daripada pertanyaan saya.
vovahost

Jawaban:

184

Karena konten Anda 24dp x 24dp, Anda harus menggunakan ikon 24dp . Dan kemudian atur android:scaleType="center"di ImageButton Anda untuk menghindari pengubahan ukuran otomatis.

Gaëtan M.
sumber
Bisakah Anda menjelaskan atau menjatuhkan tautan ke beberapa situs, mengapa misalnya di folder drawable-hdpi ada gambar _18dp.png, _24dp.png, _36dp.png, _48dp.png.
vovahost
Saya tidak mengerti pertanyaan Anda, ada 18dp, 24dp, 36dp, dan 48dp untuk gambar dengan ukuran berbeda.
Gaëtan M.
Apakah Anda ingat Android_Design_Icons lama yang hanya memiliki satu varian ikon di folder hdpi yang 48px x 48px. Kenapa sekarang di folder hdpi ada 4 resolusi berbeda untuk ikon yang sama yaitu 27px x 27 px, 36px x 36px, 54px x 54px, 72px x 72px?
vovahost
1
ImageButton adalah subkelas dari ImageView sehingga Anda memiliki atribut scaleType dan scaleType default adalah ScaleType.FIT_CENTER
Gaëtan M.
4
Tidak lagi berfungsi dengan com.android.support:support-v4:28.0.0-rc01
StarWind0
116

Buat entri ini dalam dimens

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

Di sini 36dp adalah ukuran ikon pada tombol floating point. Ini akan mengatur ukuran 36dp untuk semua ikon untuk tombol aksi mengambang.

Pembaruan Sesuai Komentar

Jika Anda ingin mengatur ukuran ikon ke Floating Action Button tertentu, cukup dengan atribut Floating action button seperti app: fabSize = "normal" dan android: scaleType = "center".

  <!--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"
Abhishek
sumber
3
Inilah yang saya butuhkan - sederhana dan mudah. Terima kasih sudah memposting.
Blisterpeanuts
1
Iya. Itu tidak bekerja dengan github.com/Clans/FloatingActionButton . Ini berfungsi saat Anda menggunakan android FloatingActionButton
Abhishek
2
Yaaah tapi saya tidak ingin melakukannya di aplikasi!
StarWind0
@ StarWind0 Saya Anda harus menggunakan atribut fabSize dan scaleType jika ingin menerapkan tombol aksi mengambang tunggal. Saya telah memperbarui jawaban saya.
Abhishek
110

Coba gunakan app:maxImageSize="56dp"alih-alih jawaban di atas setelah Anda memperbarui perpustakaan dukungan Anda ke v28.0.0

Robin
sumber
1
Bagaimanapun, Anda tidak mendapatkan ini dalam versi 28.0.0, Anda akan mendapatkannya di Androidx.
Khemraj
1
Saya belum beralih ke AndroidX, ini yang saya gunakan: api 'com.android.support:design:28.0.0'
Robin
3
Ini bekerja untuk saya tetapi saya ingin lebih banyak informasi untuk memahami mengapa mendefinisikan maxIconSizeperubahan ukuran ikon.
stramin
45

Ada tiga atribut XML kunci untuk FAB khusus:

  • app:fabSize: Baik "mini" (40dp), "normal" (56dp) (default) atau "auto"
  • app:fabCustomSize: Ini akan menentukan ukuran FAB keseluruhan.
  • app:maxImageSize: Ini akan menentukan ukuran ikon.

Contoh:

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

Padding FAB (ruang antara ikon dan lingkaran latar belakang, alias riak ) dihitung secara implisit oleh:

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

Perhatikan bahwa margin fab dapat diatur oleh android:marginproperti tag xml yang biasa .

varun
sumber
27

Pedoman desain mendefinisikan dua ukuran dan kecuali ada alasan kuat untuk menyimpang dari penggunaan keduanya, ukuran tersebut dapat dikontrol dengan fabSizeatribut XML dariFloatingActionButton komponen.

Pertimbangkan untuk menentukan menggunakan salah satu app:fabSize="normal"atau app:fabSize="mini", misalnya:

<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" />
Cristian Almstrand
sumber
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"/>

Dengan latar belakang yang Anda berikan itu menghasilkan tombol di bawah pada perangkat saya (Nexus 7 2012)

masukkan deskripsi gambar di sini

Terlihat bagus untukku.

Chris K.
sumber
7
Saya mengatur padding tetapi tidak melakukan apa-apa. Dan padding yang tepat adalah 16 dp bukan 32dp
vovahost
10

Apa tujuanmu

Jika mengatur ukuran gambar ikon menjadi lebih besar:

  1. Pastikan memiliki ukuran gambar lebih besar dari ukuran target Anda (so you can set max image size for your icon)

  2. Ukuran gambar ikon target saya adalah 84dp & ukuran hebat adalah 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" />
Semangat Alexis Chavez
sumber
6

Jika Anda menggunakan Androidx 1.0.0 dan menggunakan ukuran fab khusus, Anda harus menentukan ukuran khusus menggunakan

app:fabCustomSize="your custom size in dp"

Dengan deafult ukurannya adalah 56dp dan ada variasi lain yaitu fab berukuran kecil yaitu 40dp, jika Anda menggunakan apa pun, Anda harus menentukannya agar bantalan dihitung dengan benar.

Suhaib Roomy
sumber
Ini persis apa yang saya cari! Anda bahkan tidak perlu mengatur layout_widthdan layout_height. Itu hanya bekerja. Ini juga tersedia padacom.android.support:design:28.0.0
PNDA
4

Seperti FABseperti ImageViewbegitu Anda dapat menggunakan scaleTypeatribut untuk mengubah ukuran icon juga ImageView. Default scaleTypeuntuk a FABadalah fitCenter. Anda dapat menggunakan centerdan centerInsidemembuat ikon masing-masing kecil dan besar.

Semua nilai untuk scaleTypeatribut adalah - center, centerCrop, centerInside, fitCenter, fitEnd, fitStart, fitXYdan matrix.

Lihat https://developer.android.com/reference/android/widget/ImageView.ScaleType.html untuk rincian lebih lanjut.

lRadha
sumber
3

off dari jawaban IRadha dalam pengaturan vektor yang dapat digambar android:height="_dp" dan mengatur jenis skala untuk android:scaleType="center" mengatur gambar ke ukuran apa pun yang ditetapkan

Daniel Dube
sumber
2

Anda dapat bermain dengan pengaturan FloatingActionButton berikut ini: android: scaleType dan aplikasi: maxImageSize. Sedangkan bagi saya, saya mendapatkan hasil yang diinginkan jika android: scaleType = "centerInside" dan aplikasi: maxImageSize = "56dp".

Andrew Glukhoff
sumber