【发布时间】:2010-06-21 12:06:43
【问题描述】:
我已经在styles.xml 中描述了我的对象的属性(不管对象是什么)。我想在styles.xml 中动态更改这些属性。
有人知道我该怎么做吗?
【问题讨论】:
标签: android coding-style
我已经在styles.xml 中描述了我的对象的属性(不管对象是什么)。我想在styles.xml 中动态更改这些属性。
有人知道我该怎么做吗?
【问题讨论】:
标签: android coding-style
你可以这样做:
活动中:
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>
【讨论】:
我想更改这些 在styles.xml 中动态属性。
你到底想改变什么?运行时应用的样式?
我认为您可以在代码中使用
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 看起来像是一种令人不快的装置来处理。我会用一根很长的棍子戳它!
不要
【讨论】: