【问题标题】:values-night folder is triggered only from System theme change and not from app theme changevalues-night 文件夹仅由系统主题更改触发,而不是从应用程序主题更改触发
【发布时间】:2020-09-13 06:00:55
【问题描述】:

我正在尝试实现深色和浅色主题之间的主题切换。为 values-night 创建了 values 文件夹的副本,并分别为深色和浅色定义了两种不同的颜色。但是,当按下按钮切换主题时,它不起作用。相反,它适用于 Android 系统 UI 主题选择(意味着如果我从 Android 设备设置菜单切换主题。)当我从我的应用程序中单击切换主题时,我想让它工作。

以下代码用于切换主题:

if (isDarkModeOn) {
    System.out.println("Dark mode is on: so disable it");
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    btnTheme.setText("Enable Dark Mode");
} else {
    System.out.println("Dark mode is off: so enable it");
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    btnTheme.setText("Disable Dark Mode");
}
requireActivity().recreate();

应用主题也正确设置为:

<style name="AppTheme" parent="Theme.AppCompat.DayNight"></style>

请提出适当的方法来解决这个问题。提前致谢。

【问题讨论】:

  • 我使用材料组件主题,并且可以尝试一下。而且我认为您不需要重新创建我所知道的活动。
  • 它不适用于 App Compat 主题。我需要让它适用于 App Compat 主题。主要问题是它不会自动从两个不同的文件夹切换颜色。
  • 代码本身似乎是正确的,我认为问题出在您的资源上。去看一下。我还建议在你的主要风格中定义全局属性。 (为文本颜色和背景添加标签)
  • 主样式中的全局属性?怎么样?
  • 我将以答案的形式向您展示一些示例

标签: android user-interface android-dark-theme


【解决方案1】:

在你的风格中使用一些全局属性

 <style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowBackground">@color/background_color</item>
    <item name="android:textColor">@color/textColor</item>
</style>

这是我的应用程序,我使用这种风格,它可以正常工作

【讨论】:

  • 如果我需要将自定义定义为单元格颜色怎么办?即 @color/cellColor 。这里android不带cellColor,
  • 在你的 xml 中做它是为了全局设置
  • 我在 xml 中使用了 android:background="@color/cellColor" 但它仅适用于 android 设备主题,即不适用于应用主题切换。
【解决方案2】:

AppCompatDelegate.setDefaultNightMode(...) 仅适用于 AppCompatActivity(不适用于 Activity 或 FragmentActivity),因此请先检查父 Activity。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-06
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2021-09-14
    相关资源
    最近更新 更多