通过用户选择设置应用程序的深色或浅色主题(Android)

时间:2019-07-10 07:47:01

标签: android android-theme android-background

我们正在将深色和浅色主题应用于应用程序。我们最初的主题将变得轻松。在这种情况下,我很难更改活动的实际过渡颜色。在活动之间切换时,我使用以下代码应用动画:

finish();
startActivity(new Intent(this, MainActivity.class)
                    .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK));
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)

这留下了我们在清单上的应用程序主题上设置的背景,如下所示:

<activity
    android:name=".MainActivity"
    android:theme="@style/MyStyle_Light" />

样式如下:

<style android:name="MyStyle_Light" parent="Theme.AppCompat.Light">
     <!-- some style resources -->
</style>

<style android:name"MyStyle_Dark" parent="Theme.AppCompat">
     <!-- some style resources -->
</style>

现在,样式 Theme.AppCompat.Light 在其窗口上具有浅色背景。它是在 AndroidManifest.xml 的活动中定义的。

要更改活动的主题,我使用类似这样的代码,并且在第一个开口处看到清单中的原始颜色后,它便可以工作。

@Override
public void onCreate()
{
    setTheme(R.style.MyStyle_Dark); // can also be MyStyle_Light depending on user choice
    super.onCreate();
    setContentView(R.layout.MyLayout);

    // rest goes on
}

问题出在淡出和淡入动画之后出现的原始颜色,因为即使用户选择了深色主题,由于 MyStyle_Light 位于清单主题上,他们总是看到淡出动画上的浅色背景。

如何更改清单中的背景颜色?

到目前为止我已经尝试或考虑的事情:

  1. 使用不起作用的“ android:windowBackground”,
  2. 在应用程序类上设置主题 而不在清单中使用主题也不起作用。
  3. 使用清单上的属性在运行时从.xml更改样式,我认为这是行不通的,因为没有要引用的内容。 (只是尝试过,它不起作用。)
  4. 使用附加到清单的主题资源重复的活动,并根据用户选择启动它(对我来说似乎不必要)

感谢任何建议,谢谢。

0 个答案:

没有答案