Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android setTheme工作,但仅在从清单加载主题之后_Android_Themes_Android Manifest - Fatal编程技术网

Android setTheme工作,但仅在从清单加载主题之后

Android setTheme工作,但仅在从清单加载主题之后,android,themes,android-manifest,Android,Themes,Android Manifest,我试图在运行时设置活动的主题,从许多主题中选择一个。我希望在活动启动时立即显示所选主题 在我清单的部分,我已经用android:theme=“@style/AppTheme”设置了一个默认主题。然后在我的onCreate()中,我使用setTheme(R.style.DarkAppTheme)将主题设置为用户选择的主题(用所选主题替换DarkAppTheme) 根据研究,似乎setTheme()应该在onCreate()之前和setContentView()之前,我就是这样做的 但是,尽管这可以

我试图在运行时设置活动的主题,从许多主题中选择一个。我希望在活动启动时立即显示所选主题

在我清单的
部分,我已经用
android:theme=“@style/AppTheme”
设置了一个默认主题。然后在我的
onCreate()
中,我使用
setTheme(R.style.DarkAppTheme)
将主题设置为用户选择的主题(用所选主题替换
DarkAppTheme

根据研究,似乎
setTheme()
应该在
onCreate()
之前和
setContentView()
之前,我就是这样做的

但是,尽管这可以在用户选择的主题中显示活动,但活动首先加载看起来像默认主题的内容,然后在短时间延迟后加载正确的主题

如果我直接在清单中设置用户选择的主题,它会根据我的需要立即加载,当然这是硬编码的,我希望根据共享的首选项动态地更改它

如何避免可见的转换?我希望从一开始就显示用户选择的主题


谢谢。

如果您的
活动
加载时间过长,则会出现
AndroidManifest
上的主题。您可以尝试从
AndroidManifest
加载和删除
android:theme=“@style/AppTheme”
,甚至在这两种使用之间设置折衷方案

我希望它能帮助您\o/

活动首先加载看起来像默认主题的内容,然后在短时间延迟后加载正确的主题。。。如何避免可见的转换

当您的应用程序第一次从主屏幕上的图标启动时,“进入/打开”窗口动画有两个部分:

  • “深灰色矩形出现”动画。这是启动应用程序()时系统进程绘制的初始空白屏幕。它也被称为“主题预览”屏幕或“闪屏”。如果你的应用程序使用灯光主题,它可以是白色的
  • 视图布局的淡入(或圆形分隔缝)。这是显示在深灰色矩形顶部的视图布局的动画。它发生在第1部分之后 第1部分是您确定的“看起来像默认主题的内容”。您可以在活动/应用程序样式中使用以下项目禁用第一部分:

    <item name="android:windowDisablePreview">true</item>
    
    true
    
    这将阻止“出现深灰色矩形”动画,并且只允许“显示视图布局”,从而避免可见切换或闪烁。但也有一些警告:

  • 您必须确保活动快速启动,因为在布局完全加载之前,用户不会收到视觉动画反馈。这就是主题预览在默认情况下通常处于打开状态的原因
  • 它会导致上下文菜单上出现奇怪的错误:对于任何情况,“回车”动画将不再出现,它将立即显示(“退出”动画不受影响)。这也适用于系统弹出窗口,如溢出菜单列表和AutoCompleteTextView的下拉列表。这个错误发生在安卓4/5/6上,但不在安卓7/8上。更多信息 文件:

    允许您禁用窗口初始屏幕的标志。默认值为false;如果设置为true,则在向用户显示实际实例之前,系统永远不能使用窗口的主题来显示初始屏幕预览

    进一步资料:


    我想使用预览窗口,但用户可以选择主题。您找到解决方案了吗?