- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在创建一个简单的考试结果存储程序。该 Activity 根据用户的当前结果更改主题 - 例如血红色表示不及格等。当用户删除主题并导致整体结果发生重大变化时,主题会发生变化。主题由这个方法决定:
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() 以便使用新主题重新加载 Activity 。据我了解,没有其他方法可以动态应用新主题。不幸的是,recreate() 往往会产生刺耳的屏幕闪烁。在一台设备上,三星 S9+,屏幕甚至会变黑一会儿。但是在我的S7和华为设备上只有闪烁,仍然很烦人。
所以问题是:有没有一种方法可以实现这一点,有或没有 recreate(),这将允许我在颜色变化时添加一个漂亮的淡入过渡。
P.S:这是我的第一个问题,如果我提供的信息太少,请原谅。我不确定什么是相关的。另外,我只用 Java 和 Android-Studio 编程了大约 3 周,所以我要求一个面向菜鸟的答案。谢谢。
最佳答案
根据需要修改以下代码
@Override
public Resources.Theme getTheme() {
Resources.Theme theme=super.getTheme();
preferencesTheme=getSharedPreferences("themes", Context.MODE_PRIVATE);
String themeName=preferencesTheme.getString("theme","orange");
if("orange".equals(themeName)){
theme.applyStyle(R.style.OrangeTheme,true);
}else if("red".equals(themeName)) {
theme.applyStyle(R.style.RedTheme,true);
}
return theme;
}
比按钮点击
@Override
public void onClick(View v) {
SharedPreferences.Editor mEditorTheme=preferencesTheme.edit();
if(v.getId()==R.id.rdoOrange ){
mEditorTheme.putString("theme","orange");
mEditorTheme.apply();
recreate();
}else if(v.getId()==R.id.rdoRed){
mEditorTheme.putString("theme","red");
mEditorTheme.apply();
recreate();
}
}
在 style.xml 中
<style name="OrangeTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#FF5722</item>
<item name="colorPrimaryDark">#B13C17</item>
<item name="colorAccent">#8BC34A</item>
</style>
<style name="RedTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#F44336</item>
<item name="colorPrimaryDark">#A00B0B</item>
<item name="colorAccent">#FF9800</item>
</style>
希望对您有所帮助。
关于android - recreate() 可以给一个过渡动画吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57071210/
迁移工作正常,但我的应用程序有时必须重新启动(recreate())才能执行界面操作。此时应用程序因迁移而崩溃: java.lang.RuntimeException: Unable to start
我正在创建一个简单的考试结果存储程序。该 Activity 根据用户的当前结果更改主题 - 例如血红色表示不及格等。当用户删除主题并导致整体结果发生重大变化时,主题会发生变化。主题由这个方法决定:
我知道这可能非常简单,但我就是想不通。 我正在尝试在操作后重新加载/重新创建 Activity 。我知道我可以使用: Intent intent = getIntent(); finish(); st
是否可以在docker swarm模式下使用compose文件强制重新创建容器? (我知道在Dockerfile中使用HEALTHCHECK) 目前,我必须先删除堆栈,然后再重新部署- $ docke
我有一个简单的程序,可以从 Activity B 更改 Activity A 的背景。当您更改背景时,您需要刷新 Activity A 以使背景发生变化,在查看 stackoverflow 之后,最简
我正在开发的应用程序正在从互联网加载新闻。在主要的 Activity 上,我有一个包含主题选择的 RecyclerView。所有内容都在 onResume() 方法中加载和更新。这样做的原因是,每当我
我的目标是 API 级别 14+,所以我使用了 Activity.recreate()用于我的应用程序中的主题切换。效果很好,除了黑屏会闪烁约 0.5 秒。 我曾经认为不可能在这里提供更好的体验,直到
我目前正在上大学二级编程类(class)...我们正在研究运算符重载...为此我们将重建 vector 类...我正在构建类,发现其中大部分是基于 [] 运算符。当我尝试实现 + operator 时
我对 C++ 中 std::vector<> 的性能有疑问。通过调用其 clear() 方法重用相同的 vector 会更快,还是重新创建 vector 会更快? 下面的例子不是真实的代码,只是为了弄
我确实为 github 项目做出了贡献。 我 fork 了项目 我的东西做了吗 询问已接受的拉取请求。 现在,我的分支与主项目完全同步。好的。 我不希望任何人在 github 上从我的版本中 fork
我已经在 onCreate() 中使用了 setTheme(),如下所示: ... protected void onCreate(Bundle savedInstanceState) {
我认为直接把代码写下来会更容易,但我想要的是“重新创建”一个对象。所以在这个简单的例子中,我有一个以 int 作为属性的类。当我使用重新创建类时object = new Object();,int保持
我使用带有两个 fragment 的 ViewPager:PhotoFragment 和 GalleryFragment。 如果我滑动到第二个 fragment (GalleryFragment),我
我有一个关于mysql优化表的问题,我看了很多关于这个功能的文档,所有文档都说:它可以对InnoDB表进行碎片整理,重组表数据和关联索引数据的物理存储,以减少存储空间,但没有人能告诉我优化表的原理并解
试图重新创建这个 jquery 菜单以了解它是如何制作的,但我似乎无法让它正常工作,我最初复制了代码但出了点问题,有什么想法吗?非常感谢 原文:http://www.aldomatic.com/jqm
我正在使用 git 在测试服务器和实时服务器之间传输文件。首先,我曾经将测试的更新提交到 repo (Master),然后将更新从 repo (Master) pull 到实时服务器,然后整个实时网站
问题描述: 我的应用有主 Activity 和设置 Activity 。每次关闭设置 Activity 后,主 Activity 都会重新创建。 Main Activity 可以在两个地方通过 fin
我有一个支持库 fragment ,它发送网络调用,并在收到特定网络响应时 recreate() 父 Activity 。我可以看到 Activity 确实得到了重新创建,因为我可以看到调用了 onC
我有一个 Activity ,预计在启动时会传递一些额外信息。 当此 Activity 被销毁并重新创建时,从 onCreate() 中调用的 getIntent() 返回的 Intent 是否包含与
我想在更改主题后在 Activity recreate() 上放置一个过渡,可以吗? 我试过了:@android:anim/fade_in@android:anim/fade_out但它不起作用,这也
我是一名优秀的程序员,十分优秀!