35

Navigasyon çekmecesinde dalgalanma efekti kullanıyorum. Böyle ayarlayın ve benim ListView uyguladığımızı: Android dalgalanma arka plan rengi

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true" android:drawable="@color/black_200" /> 

    <item android:state_pressed="true" android:color="@color/black_200"> 
     <ripple android:color="@color/black_400" /> 
    </item> 

    <item android:drawable="@color/white" /> 
</selector> 

Ben dalgalanma arka plan, normal aktive devlet gibi aynı kalmasını istiyorlar. Rengi, aktif durumdakiyle aynı olacak şekilde tanımladığımda bile, daha koyu olur ve dalgalanma kabarcığı daha da karanlık olur. Arka plan renginin, aktive edilmiş durum ve dalgalanma balonu gibi olmasını istediğim renk olarak nasıl renklendirebilirim?

cevap

41

Aşağıdakileri yaparak RippleDrawable rengini kontrol edebilirsiniz: @ i.shadrin cevabını gördükten sonra

<?xml version="1.0" encoding="utf-8"?> 
<ripple 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="#FFFF0000"> <!-- The ripple will be red --> 

    <!-- the normal bg color will be light grey --> 
    <item> 
     <color android:color="#FFDDDDDD" /> 
    </item> 

    <!-- make sure the ripple doesn't exceed the bounds --> 
    <item android:id="@android:id/mask"> 
     <shape android:shape="rectangle"> 
      <solid android:color="?android:colorAccent" /> 
     </shape> 
    </item> 
</ripple> 

DÜZENLEME

: XML yoluyla,

RippleDrawable rippleDrawable = (RippleDrawable)view.getBackground(); // assumes bg is a RippleDrawable 

int[][] states = new int[][] { new int[] { android.R.attr.state_enabled} }; 
int[] colors = new int[] { Color.BLUE }; // sets the ripple color to blue 

ColorStateList colorStateList = new ColorStateList(states, colors); 
rippleDrawable.setColor(colorStateList); 

Ya Aşağıda, daha basit bir yaklaşım olduğunu (stilleri kullanarak) kabul etmeliyim. Bu sizin için bir seçenek ise, bunu tavsiye ederim.

+0

Bu, xml'de de mümkün mü? – qwertz

+0

Evet, cevabımı düzenledim. –

+0

Teşekkürler. Bu dalga boyuna zaten var olan seçicimden nasıl bağlantı kurabilirim? – qwertz

57

O stilleri ile yapacak çok kolay:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    ... 
    <item name="colorControlHighlight">@color/ripple_material_dark</item> 
    ... 
</style> 
+7

Kabul edilen cevabın posteri olarak, kabul edilen cevap haline oy veriyorum –

+0

Xamarin.Android'de bir çekicilik gibi çalışır. Elbette, _no sürpriz tabii! _ –

9

dalgalanma etkisi vermek için bakış içindeki bu iki kod satırı ekleyin. Eğer özel düğme renk ardından dalgalanma etkisi kodunun altına kullanmak kullanıyorsanız

android:clickable="true" 
android:background="?attr/selectableItemBackground" 
+1

Siyah (veya çok karanlık) arka planla çalışmaz. –

1

bir örnek dalgalanma 21 lvl ve

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
     android:color="?attr/colorControlHighlight"> 

    <!-- ripple mask --> 
    <item android:id="@+id/mask"> 
     <color android:color="@android:color/white"/> 
    </item> 

    <!-- background shape or color --> 
    <item android:drawable="@drawable/rectangle_rounded_steel_blue"/> 

</ripple> 
2

yukarıdaki API üzerinde bir seçici ile kullanmak. Dosyayı my_ripple.xml adı ile kaydedilebilir ve düğmenin arka planında ayarlayın.

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:too`enter code here`ls="http://schemas.android.com/tools" 
    android:color="@color/ripple_color" 
    tools:targetApi="lollipop"> 
    <item android:id="@android:id/mask"> 
    <shape android:shape="rectangle"> 
     <solid android:color="@color/ripple_color" 
      /> 
    </shape> 
    </item> 
    <item 
    android:id="@android:id/background" 
    android:drawable="@color/button_color" /> 
</ripple>