小编典典

强制全屏活动以在简历上重新测量/重画?

java

编辑后添加了更多详细信息:( 最初在两个月前被问到……仍然没有找到解决方案)

我的活动有些复杂。从技术上讲并不复杂…发生了很多事情。此特定应用程序中的所有活动都设置为FullScreen
NoTitleBar,并且都设置为横向。我在开发初期就注意到,当应用程序被隐藏然后又恢复时,布局很少有垂直向下滑动的趋势,好像为标题栏和状态栏腾出了空间。

在开发的后期,该应用程序现在可以调用各种外部意图。我现在注意到,从外部处理的激发意图(例如,创建“选择器”意图或拾取图像)恢复时,更倾向于进行相同的转换。我能够使用完全相同的步骤来不一致地重现它……有时它有时会发生。似乎在测量和布局的各个阶段之间都存在竞争状况。我假设系统为我执行的这些步骤之一是检查全屏和标题栏,并进行必要的更改。在某些情况下,这可能会发生得很晚。

我进行了大量日志记录,并调用invalidate(),requestLayout()等以试图捕获竞争状况,但问题似乎出在我的布局外部。我的根目录布局的top()和bottom()值始终分别为0和屏幕的高度,即使在发生问题时记录此内容时也是如此。

是否可以使用Window,WindowManager或任何其他与系统视图相关的对象的其他方法来强制完全重新测量,重新绘制,重新检查当前主题/样式标志?


阅读 212

收藏
2020-11-16

共1个答案

小编典典

我遇到了完全相同的问题,还尝试了几个步骤(如上所述)。他们都没有工作。但是我发现以下解决方法:

 protected void onResume() {
   super.onResume();
   handler.postDelayed(new Runnable() {
      public void run() {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                             WindowManager.LayoutParams.FLAG_FULLSCREEN);
      }
   }, 1000);    
 }

视图将在此过程中短暂闪烁,但至少不会被裁剪。仍然需要找到干净的解决方案。但是,这支持您的论点,即某种计时或竞赛问题。

2020-11-16