以编程方式更改style.xml中item的值

时间:2015-04-07 11:11:18

标签: android

我是Android开发新手,目前正在制作计算器应用程序。在其中,我的活动有多个按钮,我使用相同的样式。代码的结构如下所示

layout.xml <LinearLayout> <Button android:text="Button 1" style="@style/styleName" > <Button android:text="Button 2" style="@style/styleName" > <Button android:text="Button 3" style="@style/styleName" > </LinearLayout> style.xml

<resources> <style name="styleName"> <item name="attribute1">attribute1Value</item> <item name="attribute2">attribute2Value</item> <item name="attribute3">attribute3Value</item> <item name="android:background">BackgroundValue</item> </style> </resources>

现在我想为用户提供一个功能,当他/她从设置中选择特定主题时,所有按钮的背景都会改变。如果我可以在styleName中更改背景颜色的值,则可以实现此目的。我不知道如何实现这一目标。我环顾网络,并没有找到任何令人满意的答案来实现同样的目标。

2 个答案:

答案 0 :(得分:0)

显然,你无法以编程方式更改样式。如果我是你,我会在selector.xml中创建许多/res/drawable/,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item
    android:state_pressed="true"
    android:drawable="@drawable/light_btn_pressed" />
   <item
    android:state_pressed="false"
    android:drawable="@drawable/light_btn_normal" />
</selector>

对于每个“风格”,你将有一个选择器(浅色,深色,等等)。 插入可绘制的颜色或图像。 在这些之后,您可以通过设置android:background="@drawable/my_button"来应用这些选择器。 另外,使用此方法,您还可以实现按钮状态的交互。

我希望它有所帮助

答案 1 :(得分:-1)

您可以通过Typed数组访问样式xml的属性。 假设你有一个customstyle xml。

 int[] attrs ={android.R.attr.textColor, android.R.attr.background,android.R.attr.text};
TypedArray array = obtainStyledAttributes(R.style.CustomStyle, attrs);

// Fetching the colors defined in your style
int textColor = array.getColor(0, Color.BLACK);
int backgroundColor = array.getColor(1, Color.BLACK);