Android波纹背景颜色

我在导航抽屉上使用涟漪效应。 我已经这样设置,并将其应用到我的ListView:

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

我希望纹波背景像正常激活状态一样保持不变。 即使当我将颜色定义为与激活状态相同时,颜色变深,波纹气泡变得更黑。 我怎样才能使背景颜色像激活状态和波纹泡泡一样是我所说的颜色?

您可以通过执行以下操作来控制RippleDrawable的颜色:

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

或者,通过XML:

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

编辑

看到@ i.shadrin的答案后,我必须承认这是一个更简单的方法(使用样式)。 如果这是你的select,我会推荐它。

使用样式要容易得多:

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

在你的视图里面添加这两行代码来产生涟漪效应。

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

在api lvl 21及以上版本中使用select器的例子

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

如果您使用自定义button颜色,则使用下面的代码来获得连锁效果。 将文件保存为名为my_ripple.xml的 drawable,并在button的后台进行设置。

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