ImageButton'a Materyal Tasarım Dokunma Dalgası Uygulansın mı?


96

Lolipop üzerinde yerleşik dalgalanma efektiyle gelen normal düğmelerden farklı olarak statik bir görüntü olduğu için tıklandığında dokunmatik animasyonla yanıt vermeyen bir görüntü düğmem var. Görsele materyal tasarım dalgalanma dokunma efektini eklemek istiyorum, ancak bunu uygulamak için bir yol bulamıyorum. Görüntünün üzerine bir renk filtresi ayarlayabilirim, ancak bu dalgalanma etkisi değil. Yapmaya çalıştığım şeye bir örnek, Google Play Müzik'te bir albüm kapağı resmini tuttuğunuzda ve resim üzerinde bir gölge dalgası hareket ettiğinde verilebilir.

Yanıtlar:


267

Daha da iyi sonuç için:

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@android:drawable/ic_button"
    android:background="?attr/selectableItemBackgroundBorderless"
/>

7
Bu daha iyi bir cevap - dairesel bir his ve dalgalanma etkisi veriyor, teşekkürler.
ElliotM

3
Bu, renkli çekmecelerde de çalışmalı mı? Benim için arka plan uygulanmasına rağmen dokunma efekti görünmüyor. Temam Theme.AppCompat.Light.DarkActionBar'dan genişliyor, bu bir sorun olabilir mi?
Görünen ad

12
bunun yerine arka plan iyi çalıştığı tüm görünümler için ön planda kullanın.
Gopi Cg

1
Bunu yapmanın ve arka plan rengini değiştirmenin bir yolunu bulan var mı? BackgroundTint'i değiştirmek çalışmıyor ve Ön Plan'ı "? Attr / selectableItemBackgroundBorderless" olarak ayarlamak, düğmede kötü bir dolgu veriyor.
Sev

1
Koyu bir arka plan kullanıyorsanız, dalgalanma yeterince görünmeyebilir. Bunu ekleyerek açık renkli bir dalgalanmaya değiştirirsiniz android:theme="@style/Base.ThemeOverlay.AppCompat.Dark"(<API 21'de çalışır). Diğer çözümler için stackoverflow.com/q/28605031/599535 adresine bakın .
Lifes

28

ImageButton'ınıza aşağıdaki gibi bir arka plan ekleyebilirsiniz:

<ImageButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@android:drawable/btn_dialog"
    android:background="?android:attr/selectableItemBackground" />

2
Android: foreground = "?
Attr

@MFQ ile arasındaki fark nedir? Android: attr / selectableItemBackground
Killer

1
@killer selectableItemBackgroundBorderless = Araç Çubuğundaki bir simgeye tıklarsanız, ancak selectableItemBackground dikdörtgen dalgalanma verir gibi sınırları olmayan dairesel bir dalgalanma verin, bu çeki demirlerini uygulayan simgeye uzun tıklarsanız farkı görebilirsiniz
MFQ

6

İ.shadrin'den ( burada ) ve Nicolars'tan ( burada ) iyi yanıtlar aldım .

Cevapları arasındaki fark, ?attr/selectableItemBackgroundBorderlesssize bir cevap verebilmesidir android.view.InflateException, yani ?android:attr/selectableItemBackgroundçözüm de öyle.

FWIW, istisnanın neden olduğunu bilmiyorum, çünkü ilk cevap tüm eski projelerimde iyi çalıştı, ancak son projemde değil (belki uygulama teması = android:Theme.Material?).

Olan garip şey, dalgalanma etkisi gösterilmiş olmasına rağmen, ImageButton'ı aşıyor olmasıydı, dolayısıyla çözüm şuydu:

  • Kullanmak için android:foreground="?android:attr/selectableItemBackgroundBorderless"yerineandroid:background="?android:attr/selectableItemBackgroundBorderless"

Aynı şeyle karşı karşıya kalırsan sana yardımcı olacağını umuyorum.


3

Zaten bir arka planınız varsa ve değiştirmek istemiyorsanız, ön planı kullanın;

<ImageButton
    android:layout_width="60dp"
    android:layout_height="match_parent"
    android:background="@drawable/preview_in_4k_background"
    android:src="@drawable/ic_full_screen_24px"
    android:layout_marginLeft="5dp"
    android:foreground="?attr/selectableItemBackgroundBorderless"
    android:layout_column="2"/>
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.