我已经在styles.xml中描述了我的对象的属性(不用管对象是什么)。我想动态地在styles.xml中更改这些属性。有人知道如何做到吗?
this.setTheme(R.style.ThemeRed);
<resources>
<style name="ThemeBlack" parent="@android:style/Theme">
<item name="android:textColor">#FFFFFF</item>
<item name="android:typeface">sans</item>
<<item name="android:background">#999999</item>
<item name="android:textSize">16sp</item>
</style>
<style name="ThemeRed" parent="@android:style/Theme">
<item name="android:textColor">#FFFFFF</item>
<item name="android:typeface">sans</item>
<item name="android:background">#c81111</item>
<item name="android:textSize">16sp</item>
</style>
</resources>
TypedArray a = context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)
在这里,我认为:
AttributeSet set = null;
因为这是XML填充器提供的。
int[] attrs = R.styleable.MyWidget;
定义了我想查看的属性。
int defStyleAttr = myWidgetStyle;
这是一个引用,在我的主题中定义了MyWidget的样式。这两个都在res/values中的XML文件中定义。“myWidgetStyle”遵循了Android开发人员在他们的代码中使用的命名模式。
defStyleRes = 0;
我希望我不需要考虑这个。
然后,要获取任何属性,例如背景颜色,
Color color = a.getColor(R.styleable.MyWidget_background, R.color.my_default);
a.recycle();
目前看来,这似乎有效。
Android构建系统似乎很方便地生成了在a.getColor中使用的正确索引,并将其命名为R.styleable.MyWidget_background。我没有创建这个名称,所以Android必须使用我的MyWidget样式XML来完成它。
我希望可以通过搜索所需属性的TypedArray来查找正确的索引,但那样效率低下,而且TypedArray看起来像是一个不愉快的装置。我会用一根非常长的棍子去戳它!
Don