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

Android 以编程方式更改style.xml中项的值,android,Android,我是android开发的新手,目前正在制作一个计算器应用程序。在其中,我的活动有许多按钮,我在这些按钮上应用了相同的样式。代码的结构如下所示 layout.xml style.xml 属性1值 属性2值 属性3值 背景值 现在我想为用户提供一个功能,当他/她从设置中选择一个特定主题时,所有按钮的背景都会改变。如果我可以在styleName中更改背景色的值,就可以实现这一点。我不知道如何做到这一点。我环顾了一下网页,没有找到任何令人满意的答案来实现同样的目标。您可以通过类型化数组访问样式x

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

layout.xml

style.xml


属性1值
属性2值
属性3值
背景值


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

您可以通过类型化数组访问样式xml的属性。 假设您有一个自定义样式的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);

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

<?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”
应用这些选择器。 另外,使用此方法还可以实现按钮状态的交互


我希望它有帮助

您尝试过这个吗?上面的链接用于获取值,但要求用于更改值。请记住,并非所有SDK都支持相同的主题。在这个答案中,您可以获取值,但问题是有关更改值的。