Yüzer eylem düğmesinin simge boyutunu ayarlama (fab)


172

Yüzen düğme Yeni hareketli eylem düğmesi 56dp x 56dp ve içindeki simge 24dp x 24dp olmalıdır . Bu nedenle, simge ve düğme arasındaki boşluk 16dp olmalıdır .

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

Ve elde ettiğim sonuç:
Kayan düğme sonucu
Simgeyi \ material-design-icons-1.0.0 \ content \ drawable-hdpi \ ic_add_black_48dp.png
https://github.com/google/material-design-icons/releases adresinden kullandım. /tag/1.0.1

Düğmenin içindeki simgenin boyutunu tam olarak yönergelerde açıklandığı şekilde nasıl yapabilirim ?

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



@InsaneCat Belki de tersi çünkü bahsettiğiniz soru benimkinden daha yeni.
vovahost

Yanıtlar:


184

İçeriğiniz 24dp x 24dp olduğundan 24dp simgesi kullanmalısınız . Ve sonra android:scaleType="center"otomatik yeniden boyutlandırmayı önlemek için ImageButton'unuzu ayarlayın .


Bazı sitelerin bağlantısını açıklayabilir veya bırakabilirsiniz, örneğin neden çizilebilir hdpi klasöründe _18dp.png, _24dp.png, _36dp.png, _48dp.png görüntüleri vardır.
vovahost

Sorunuzu anlamıyorum, farklı boyutta görüntüler için 18dp, 24dp, 36dp ve 48dp var.
Gaëtan M.

48px x 48px olan hdpi klasöründe simgenin yalnızca bir varyantı olan eski Android_Design_Icons'ı hatırlıyor musunuz? Neden şimdi hdpi klasöründe aynı simge için 4 farklı çözünürlük var, yani 27px x 27 px, 36px x 36px, 54px x 54px, 72px x 72px?
vovahost

1
Eğer bir scaleType Attribut var ve varsayılan scaleType yani ımagebutton ImageView bir alt sınıfıdır ScaleType.FIT_CENTER
Gaëtan M.

4
Artık com.android.support:support-v4:28.0.0-rc01
StarWind0 ile

116

Bu girişi soluklaştır

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

Burada 36dp kayan nokta düğmesindeki simge boyutudur. Bu, kayan eylem düğmesi için tüm simgeler için 36dp boyutunu ayarlayacaktır.

Yorum Başına Güncellemeler

Simge boyutunu belirli Yüzer Eylem Düğmesine ayarlamak istiyorsanız, sadece app: fabSize = "normal" ve android: scaleType = "center" gibi Yüzer eylem düğmesi niteliklerine gidin.

  <!--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
Bu sadece ihtiyacım olan şeydi - basit ve kolay. Gönderdiğiniz için teşekkürler.
Blisterpeanuts

1
Evet. Github.com/Clans/FloatingActionButton ile çalışmaz . Androidleri kullanırken çalışır FloatingActionButton
Abhishek

2
Evet ama uygulama genelinde yapmak istemiyorum!
StarWind0

@ StarWind0 Tek kayan eylem düğmesi için başvurmak istiyorsanız fabSize ve scaleType özniteliklerini kullanmak zorundayım. Cevabımı güncelledim.
Abhishek

110

app:maxImageSize="56dp"Destek kitaplığınızı v28.0.0 sürümüne güncelledikten sonra yukarıdaki yanıtlar yerine kullanmayı deneyin


1
Herhangi bir şekilde, bunu 28.0.0 sürümünde almıyorsunuz, androidx'te alacaksınız.
Khemraj

1
AndroidX'e geçmedim, bu kullanıyorum: api 'com.android.support:design:28.0.0'
Robin

3
Bu benim için çalıştı, ancak maxIconSizesimge boyutunu neden değiştirdiğini tanımlamak için daha fazla bilgi istiyorum .
19'da stramin

45

Özel FAB'ler için üç temel XML özelliği vardır:

  • app:fabSize: "Mini" (40dp), "normal" (56dp) (varsayılan) veya "otomatik"
  • app:fabCustomSize: Bu genel FAB büyüklüğüne karar verecektir.
  • app:maxImageSize: Bu simge boyutuna karar verecektir.

Misal:

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

FAB dolgusu (simge ile arka plan dairesi, yani dalgalanma arasındaki boşluk ) örtük olarak şu şekilde hesaplanır :

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

Fab kenar boşluklarının her zamanki android:marginxml etiketi özellikleri tarafından ayarlanabileceğini unutmayın .


27

Tasarım yönergeleri iki boyutu tanımlar ve her ikisini kullanmaktan sapmak için güçlü bir neden yoksa, boyut bileşenin fabSizeXML özniteliğiyle kontrol edilebilir FloatingActionButton.

Aşağıdakilerden birini app:fabSize="normal"veya app:fabSize="mini"örneğin:

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

Sağladığınız arka planla cihazımda aşağıdaki düğme ile sonuçlanır (Nexus 7 2012)

resim açıklamasını buraya girin

Bana iyi görünüyor.


7
Dolguyu ayarladım ama hiçbir şey yapmıyor. Ve doğru dolgu 32 dp değil 16 dp olurdu
vovahost

10

Amacın nedir?

Simge görüntü boyutunu daha büyük bir boyuta ayarlarsanız:

  1. Hedef boyutunuzdan daha büyük bir resim boyutuna sahip olduğunuzdan emin olun (so you can set max image size for your icon)

  2. Hedef simgem görüntü boyutu 84dp ve fab boyutu 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" />

7

Androidx 1.0.0 kullanıyorsanız ve özel bir fab boyutu kullanıyorsanız, kullanarak özel boyutu belirtmeniz gerekecektir.

app:fabCustomSize="your custom size in dp"

Deafult tarafından boyutu 56dp ve 40dp olan küçük boyutlu fab olan başka bir varyasyon var, eğer bir şey kullanıyorsanız dolgu doğru hesaplanması için belirtmeniz gerekecek


Tam da aradığım şey buydu! Ayarlamanıza bile gerek yok layout_widthve layout_height. Sadece çalışıyor. Bu ayrıcacom.android.support:design:28.0.0
PNDA

4

As FABgibidir ImageViewkullanabilirsiniz böylece scaleTypeaynı şekilde simge boyutunu değiştirmek için öznitelik ImageView. Standart scaleTypebir için FABolduğunu fitCenter. Simgeyi sırasıyla küçük ve büyük yapmak için centerve centerInsidedüğmelerini kullanabilirsiniz .

scaleTypeÖzellik için tüm değerler - center, centerCrop, centerInside, fitCenter, fitEnd, fitStart, fitXYve şeklindedir matrix.

Daha fazla bilgi için https://developer.android.com/reference/android/widget/ImageView.ScaleType.html adresine bakın.


3

IRadha'nın vektör çekilebilir ayarındaki cevabı kesildi android:height="_dp" ve çekilebilirliği ayarlanan boyuta ayarlamak için ölçek türünü android:scaleType="center" ayarlama


2

Aşağıdaki FloatingActionButton ayarlarıyla oynayabilirsiniz: android: scaleType ve app: maxImageSize. Bana gelince, android: scaleType = "centerInside" ve app: maxImageSize = "56dp" ise istenen bir sonuç aldım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.