android动态改变风格

时间:2010-06-21 12:06:43

标签: android coding-style

我在styles.xml中描述了我的对象的属性(永远不知道对象是什么)。我想在styles.xml中动态更改这些属性。

有人知道我该怎么办?

3 个答案:

答案 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)

我看到这个问题的答案是矛盾的。这表示yes,但这表示no。我查看了视图的android文档,找不到任何setStyle方法。

答案 2 :(得分:0)

  

我想改变这些   在styles.xml中使用dinamically属性。

您想要改变什么?在运行时应用的样式?

我想你可以使用

在代码中执行此操作
TypedArray a =  context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)

这对我来说似乎是

  1. AttributeSet set = null;因为这是XML inflater提供的内容。

  2. int[] attrs = R.styleable.MyWidget;定义了我想要查看的属性。

  3. int defStyleAttr = myWidgetStyle;这是我的主题中定义的引用,用于MyWidget的样式。这些都是在res / values的XML文件中定义的。 “myWidgetStyle”遵循Android开发人员在其代码中使用的名称模式。

  4. defStyleRes = 0;我希望我不需要考虑这一点。

  5. 然后获取任何属性,例如背景颜色

    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看起来像是一个令人不快的处理方法。我会用很长的棒来戳它!

相关问题