2016-08-26 26 views
18

Görünüm (LinearLayout) tıklatıldığında, her zaman android:background="?selectableItemBackground" dalgalanma efekti için kullanıyorum. Geriye doğru bu API 14 uyumlu olduğunu bir yere okudum düşünüyorum Ancak, bu dalgalanma efekti kullanmanız gerektiğini, ancak beyaz bir arka plan ile buldum. Özellikle, ben varsayılan renk arka plan üzerinde görüntülenecek bir liste öğesi için bir düzen var (Ben Theme.AppCompat.Light.NoActionBar uzanıyorum), bu yüzden liste öğesinin düz beyaz bir liste (#FFFFFF) renklendirme yaparak bu öğeden dikkat çekmek istiyorum .? SelectableItemBackground öğesini beyaz arka plan rengiyle kullanma

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="?selectableItemBackground" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    ... 

    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_vertical" 
     android:paddingLeft="@dimen/mdu_keyline_1" 
     android:paddingRight="@dimen/mdu_keyline_1" 
     android:paddingTop="@dimen/mdu_padding_normal" 
     android:paddingBottom="@dimen/mdu_padding_normal"> 

     ... 

    </LinearLayout> 

</FrameLayout> 

yukarıda beyaz zemin olmadan dalgalanma etkisi üretir: Burada

liste öğesi düzenidir.

Ben denerseniz:

<FrameLayout ... 
    android:background="@color/white"> 

Bu açıkça bir beyaz arka plan üretir fakat dalgalanma etkisi olmadan.

Ben de başka bir şey denedik - ve bu ne arıyorum en yakın bir sonuç üretti:

<FrameLayout ... 
    android:background="@color/white"> 

    ... 

    <LinearLayout ... 
     android:background="?selectableItemBackground"> 

yukarıda bana bir dalgalanma etkisi ile beyaz arka plan verdi. Ancak,, tıklattığım öğenin hangi kısmına bakılmaksızın dalgalanma her zaman merkezden başlıyor gibi görünüyor.

Geçerli sonucu gösteren bazı ekran görüntüleri (liste öğelerinin üstündeki gölgeleri yok sayarız - bu, AppBarLayout ve Toolbar kullanıyorum gölgesidir).

enter image description here

enter image description here

nasıl istenen etkiyi elde edebiliriz?

cevap

35

Sen FrameLayout ön planını kullanabilirsiniz: Eğer drawables klasöründe bir katman-listesi oluşturabilir

<FrameLayout ... 
    android:background="@android:color/white" 
    android:foreground="?attr/selectableItemBackground"> 
+0

Bu mükemmel! Çok teşekkür ederim. –

+2

Hm. Daha önce neden ön plana çıkmadığını merak ediyorum. Yine de çalışıyor! Teşekkürler! – EGHDK

15

ve arka planınıza bu ayarlayın:

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@android:color/white"/> 
    <item android:drawable="?attr/selectableItemBackground"/> 
</layer-list> 
+0

Çizilebilir klasörde dalgalanma kullanırken, Android 6.0'da bu hataya neden oldu, lütfen bir soru oluşturdum: [binary-xml-dosya-satırı-hata-şişirme-sınıf-bilinmeyen] (http://stackoverflow.com/ sorular/38862718/ikili-xml dosya-line-hata-şişirme sınıf-bilinmeyen). Android 6.0'da bu şekilde denediniz mi? –

+0

Bu, arka plan olarak çizilebilir (ön plan yerine) olarak kullanıldığında da olur mu? Şu anda uygulamamın birinde tam katman listesini kullanıyorum, Android 6'da iyi çalışıyor. Destek libs 23.4.0 kullanıyorum. – Marcel50506

+0

Evet Arka plan olarak kullanmayı denedim. Belki bu bir CardView sorunudur.Normal View ile kullanmayı denedi. –

0

Dalgalanma çekilebilir bir olduğunu LayerDrawable. Yani bunu yapmanın doğru yolu şudur:

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
     android:color="?attr/colorControlHighlight"> 

    <item> 
     <shape> 
      <solid 
       android:color="#FFFFFF"/> 
     </shape> 
    </item> 

    <item android:id="@android:id/mask"> 
     <shape> 
      <solid android:color="@android:color/white"/> 
     </shape> 
    </item> 

</ripple> 
İlgili konular