我在styles.xml中描述了我的对象的属性(永远不知道对象是什么)。我想在styles.xml中动态更改这些属性。
有人知道我该怎么办?
答案 0 :(得分:6)
你可以这样做:
活动:
this.setTheme(R.style.ThemeRed);
在styles.xml中:
<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>
答案 1 :(得分:3)
答案 2 :(得分:0)
我想改变这些 在styles.xml中使用dinamically属性。
您想要改变什么?在运行时应用的样式?
我想你可以使用
在代码中执行此操作TypedArray a = context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)
这对我来说似乎是
AttributeSet set = null;
因为这是XML inflater提供的内容。
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必须使用我的XML为我的风格MyWidget完成它。
我希望通过在TypedArray中搜索所需的属性来查找正确的索引,但这样效率很低,而且TypedArray看起来像是一个令人不快的处理方法。我会用很长的棒来戳它!
唐