如何在保留其他样式属性的同时更改 Android Button 波纹颜色?

Posted

技术标签:

【中文标题】如何在保留其他样式属性的同时更改 Android Button 波纹颜色?【英文标题】:How to change Android Button ripple colors while preserving other style properties? 【发布时间】:2017-01-17 15:59:04 【问题描述】:

我想从默认材料设计风格继承所有Button 风格,并保留按下按钮时出现的背景颜色和阴影(所谓的高度)。我唯一想改变的是涟漪效果的颜色(当你触摸一个按钮然后移动你的手指时)。

如果我使用以下样式:

<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="android:buttonStyle">@style/MyTheme.Button</item>
</style>

<style name="MyTheme.Button" parent="Widget.AppCompat.Button.Colored">
  <item name="android:background">@drawable/btn_material</item>
</style>

而drawable/btn_material 是:

<ripple android:color="#ffff0000">
  <item android:id="@android:id/mask"
     android:drawable="@android:color/white" />
</ripple>

然后我的按钮失去了它的背景颜色和高度阴影。

有没有办法告诉按钮保留从父级继承的默认颜色和阴影,并且只用给定的颜色替换波纹颜色?本质上,我想实现类似android:backgroundRipple 属性的东西,它只会改变涟漪,而其他一切都完好无损。

【问题讨论】:

【参考方案1】:

RippleDrawable 波纹= (RippleDrawable)view.getBackground();

int[][] attr= new int[][] new int[] android.R.attr.state_enabled ; int[] 颜色 = new int[] Color.RED ; // 设置波纹颜色为红色

ColorStateList 颜色 = 新颜色(状态,颜色); 波纹.setColor(颜色);

【讨论】:

以上是关于如何在保留其他样式属性的同时更改 Android Button 波纹颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅通过更改域名来重定向 URL,同时保留其他 URL 参数

Django 表单子类化 - 如何修改继承字段的某些属性,同时保留其他属性?

如何同时对 QPushButton 应用悬停和格式化?

用js的啥方法把样式的某个属性去掉而其他的属性保留

如何更改 Android 布局样式中继承样式的背景颜色?

更改 ListView 项目背景颜色但保留默认选择器样式?