在运行时使用外部主题文件更改应用程序主题

5
我希望开发一个单一的应用程序,允许用户选择主题,并在整个应用中应用该主题。我知道可以通过在每个活动的onCreate中使用setTheme来实现这一点。但我需要以不同的方式实现这一点。我不想将主题存储在theme.xml或styles.xml中。我希望有一个主题列表存储在web上,并能够动态下载新主题并将其应用于应用程序中。我希望能够创建新主题,而无需构建新版本或更新版本的应用程序。更换图像很容易。只需从url下载并存储到本地以便重复使用。但是应用程序的实际主题,如按钮颜色等,应该从一个在线获取的theme.xml文件中在运行时进行更改,该文件不是apk的一部分。这是否可行?
1个回答

2

这取决于你希望能够进行多少样式设置。目前无法通过编写代码来设置视图项的样式,除非使用资源。但是你可以控制文本颜色和背景颜色等方面。如果这就是你需要改变的所有内容,我建议为你的应用程序编写一个主题工厂类,用于获取需要的每个视图元素。例如,一个getButton()函数,它将返回一个带有所需背景颜色和文本颜色的按钮。


嗨Ben,谢谢你的回复。我认为这听起来非常有前途,因为我们只想改变背景和文本的颜色。在这样的工厂方法中,如果要使用自定义颜色更改按钮的颜色,该怎么做呢?该颜色不是在构建时在应用程序中定义的,也不是Android SDK的一部分。 - Stephen
1
所以,如果你下载的样式是json格式的,你需要解析出背景颜色字段。然后在你的主题getButton()方法中,你可以创建一个新的按钮并调用button.getBackground().setColorFilter("YOUR COLOR", PorterDuff.Mode.MULTIPLY)来设置按钮的背景颜色。注意,这个滤镜会将你的颜色与默认颜色相乘,所以它可以正常工作。但是还有很多其他的ColorFilter选项可供使用。同样地,你也可以使用button.setTextColor(YOUR BUTTON TEXT COLOR)来改变按钮的文本颜色。 - Ben
哦...这很性感。谢谢,伙计!我要开始编写一个测试了。把它做成一个答案,我会给它打勾的。 - Stephen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接