我是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中更改背景颜色的值,则可以实现此目的。我不知道如何实现这一目标。我环顾网络,并没有找到任何令人满意的答案来实现同样的目标。
答案 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);