【问题标题】:How to change theme attributes dynamically?如何动态更改主题属性?
【发布时间】:2021-01-27 08:03:17
【问题描述】:

在我的应用中,我有多个用户帐户。每个用户都可以定义自己的一组颜色。如colorPrimarycolorPrimaryDarkcolorAccent等。所以每当用户登录时,活动将使用用户定义的colorstheme

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

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

注意:用户可以选择任何颜色。所以不会有预定义的主题。

是否可以完全动态地仅从代码中应用主题属性?

【问题讨论】:

    标签: java android android-studio android-activity android-theme


    【解决方案1】:

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

    第一个选项,在你的 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,因为它是不可变的

    【讨论】:

    • 我认为您可以创建每个主题包含的 3 个属性类并创建一个事件侦听器,但您还将更改 50 个视图手册的颜色,或者搜索所有具有旧颜色的视图并设置新颜色,我们可以搜索是否可以在外部文件而不是themes.xml中生成XML主题,并使用setTheme来应用这个主题
    • 谢谢。现在我正在尝试使用预定义的主题。但我正面临这个问题......(stackoverflow.com/questions/64352455/…
    猜你喜欢
    • 2015-07-16
    • 2015-03-10
    • 2019-08-11
    • 1970-01-01
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    相关资源
    最近更新 更多