【发布时间】:2019-11-26 00:19:39
【问题描述】:
我正在创建一个简单的考试结果存储程序。活动根据用户的当前结果更改主题 - 例如血红色代表不及格等。当用户删除主题并导致整体结果发生重大变化时,主题会发生变化。 主题由这种方法决定:
private int getTheme()
{
String[] themes={"GreenTheme","TurquoiseTheme","OrangeTheme","RedTheme","BlackTheme"};
int index=0;
float gpa =getSemesterGpa(currentSemester);
if (gpa >= 3.5)
index = 0;
else if (gpa >= 3)
index = 1;
else if (gpa >= 2.5)
index = 2;
else if (gpa >= 2)
index=3;
else
index=4;
return getResources().getIdentifier(themes[index],"style",getPackageName());
}
我的 onCreate() 中有:
protected void onCreate(Bundle savedInstanceState)
{
setTheme(getSgpaTheme());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_semester_detail);
...
}
每当删除主题导致 GPA 发生重大变化时,我都会使用 recreate() 以便使用新主题重新加载活动。据我了解,没有其他方法可以动态应用新主题。不幸的是, recreate() 往往会产生屏幕不和谐的闪烁。在一台设备上,三星 S9+,屏幕甚至会暂时变黑。但是在我的S7和华为设备上只有一个闪烁,还是很烦人。
所以问题是:有没有办法实现这一点,无论是否使用 recreate(),这将允许我在颜色变化时添加一个很好的淡入过渡。
P.S:这是我的第一个问题,如果我提供的信息太少,请原谅。我不确定什么是相关的。另外,我只用 Java 和 Android-Studio 编程大约 3 周,所以我要求一个面向菜鸟的答案。谢谢。
【问题讨论】: