【问题标题】:The app theme doesn't load correctly if it differs from the system theme如果应用主题与系统主题不同,则无法正确加载
【发布时间】:2020-04-20 12:36:44
【问题描述】:

我有一个问题,我的应用中有两个主题。深色主题和浅色主题

问题是如果我将应用主题设置为与系统主题不同,则应用主题无法正确加载。

Light 主题继承自:

<style name="Theme.Light" parent="Theme.MaterialComponents.Light.NoActionBar">

黑暗主题继承自:

<style name="Theme.Dark" parent="Theme.MaterialComponents.NoActionBar">

例如如果系统主题为浅色且应用程序主题使用继承自的深色主题 'Theme.MaterialComponents.NoActionBar' 那么主题将无法正确呈现,反之亦然。

我正在使用 values-night 目录,其中包含深色主题中使用的所有颜色。

【问题讨论】:

  • 如果您使用 values-night,那么您可能应该有一个主题,其父项为“Theme.MaterialComponents.DayNight”。看这篇文章:medium.com/androiddevelopers/…
  • 我试过了,但它导致了选择正确背景颜色的问题。如果当前设置的主题是暗的,我通过强制应用进入夜间模式来解决问题。
  • 在白天的情况下,问题可能是样式中的颜色声明。

标签: android material-design android-theme android-dark-theme


【解决方案1】:

我通过将应用设置为根据应用主题切换主题模式来解决问题。

fun setTheme(){
        if(getThemeRes() == R.style.Theme_Dark){
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
        }
        else{
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
        }
    }

返回包含当前设置主题的 Integer 资源的函数。

fun getThemeRes() = packageManager.getPackageInfo(
        packageName,
        PackageManager.GET_META_DATA
    ).applicationInfo.theme

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-13
    • 1970-01-01
    • 2014-06-13
    • 2019-12-14
    • 1970-01-01
    相关资源
    最近更新 更多