如何动态更改主题属性?

问题描述

在我的应用中,我有多个用户帐户。每个用户可以定义自己的颜色集。诸如colorPrimarycolorPrimaryDarkcolorAccent等。因此,每当用户登录时,活动将使用用户定义的colors来表示theme。>

为了更好地理解,说我的user是:

class User {
    String user_name = "Iron Man";
    int colorPrimary = Color.RED;
    int colorAccent = Color.BLUE;
    ...

注意:用户可以选择任何颜色。因此将没有预定义的主题

是否可以仅通过代码完全动态地应用主题属性

解决方法

我在两个应用程序中都创建了相同的想法,您有两个选择

第一个选项,在您的theme.xml文件中创建许多主题,并根据活动中的用户使用setTheme函数更改整个主题,例如,深色主题,白色主题,蓝色主题等,例如Askfm App

检查此应用代码,我已经在其上创建了此功能 https://github.com/amrdeveloper/askme

第二个选项,使用户能够使用颜色选择器更改所有内容 并使用诸如getSupportActionBar,setStatusBarColor,setNavigationBarColor和SharedPreferences之类的功能来更改主题

我已经在我的应用中实现了这个想法,您可以从链接中查看结果

https://play.google.com/store/apps/details?id=com.amrdeveloper.materialtimer

但是您不能在运行时编辑主题XML,因为它是不可变的