如何在Xamarin.Android运行时修改Style中的自定义属性颜色值?
可行实现方案
首先明确:Android编译后的资源文件是只读的,无法直接修改styles.xml里的<item>项,但可以通过以下两种方式实现你要的动态修改颜色的效果:
方法一:直接给自定义View设置属性值(推荐,灵活无重启)
你的path36等是自定义declare-styleable属性,对应应该是一个自定义View(比如SensorView),直接在代码里给目标View设置颜色即可:
- 获取目标颜色值:
int minus15Color = ContextCompat.getColor(this, R.color.minus15);
- 找到自定义View实例并设置颜色:
如果你的自定义View已经提供了属性的setter方法,直接调用:
SensorView sensorView = findViewById(R.id.your_sensor_view_id); sensorView.setPath36Color(minus15Color);
如果自定义View没有对应的setter,需要在自定义View类中添加:
// 先在自定义View中声明存储颜色的成员变量 private int mPath36Color; // 添加setter方法 public void setPath36Color(int color) { mPath36Color = color; invalidate(); // 触发重绘,让新颜色生效 }
方法二:通过切换主题实现(适合全局样式修改)
如果需要全局统一修改多个View的该属性,可以定义主题变体,运行时切换:
- 在
styles.xml中扩展原主题:
<style name="MainTheme" parent="MainTheme.Base"> <item name="path12">@color/plus15</item> <item name="path24">@color/plus7</item> <item name="path36">@color/nodata</item> <item name="path48">@color/nodata</item> <item name="path60">@color/nodata</item> </style> <!-- 定义变体主题,覆盖path36的颜色 --> <style name="MainTheme.Path36Minus15" parent="MainTheme"> <item name="path36">@color/minus15</item> </style>
- 运行时满足条件时切换主题:
if (/* 你的判断条件 */) { setTheme(R.style.MainTheme_Path36Minus15); recreate(); // 重启Activity让主题生效 }
注意:这种方法需要重启Activity,适合全局样式切换场景,不适合局部View的动态修改。
内容的提问来源于stack exchange,提问作者Joe Oliphant
相关产品推荐
相关产品推荐

