如何使应用程序具有黑暗和明亮的主题?

时间:2019-06-29 15:45:19

标签: java android

我需要为Android应用制作两个主题。黑暗与光明的主题。而且我想使用自定义颜色,大小,字体...所以我想做类似的事情:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
            <!-- Customize your theme here. -->
            <!-- sizes, fonts... -->
    </style>

    <style name="AppTheme.Dark" parent="AppTheme">

    </style>

    <style name="AppTheme.Light" parent="AppTheme">

    </style>

然后我要制作“黑暗与光明”主题以扩展AppTheme并仅更改颜色。

所以我需要一些教程,技巧或最有效的方法。 我感谢所有建议,谢谢。 :)

1 个答案:

答案 0 :(得分:2)

我认为您进展顺利,您将为每个主题定义不同的样式,如下所示:

<style name="AppTheme.Dark" parent="AppTheme">
        <item name="colorPrimary">/* color for dark theme */ </item>
        <item name="android:windowBackground">/* color for dark theme */ </item>
        // default font color for dark theme
        // etc.
</style>

<style name="AppTheme.Light" parent="AppTheme">
        <item name="colorPrimary">/* color for light theme */ </item>
        <item name="android:windowBackground">/* color for light theme */ </item>
        // default font color for light theme
        // etc.
</style>

AppTheme将定义“黑暗与黑暗”主题共有的样式。

此外,您还将在应用程序中设置一个可跟踪当前用户主题的设置。因此,让我们想象一下此设置保留在SharedPreferences中。然后,每次创建活动时,您都将检查当前设置并应用相应的主题:

@Override
protected void onCreate(Bundle savedInstanceState) {
    boolean darkModeIsEnabled = // read the setting from SharedPreferences

    if (darkModeIsEnabled) {
        setTheme(R.style.AppTheme_Dark)
    } else {
        setTheme(R.style.AppTheme_Light)
    }
    super.onCreate(savedInstanceState)
    setContentView(R.layout.my_activity)
}

最后一点,您可能希望用户从应用程序中切换主题,在这种情况下,您将需要重新创建一个或多个活动以应用新主题。

对于示例应用程序,您可以查看here。您可以检查themes.xml文件以了解其完成情况。