【发布时间】:2020-05-20 17:55:05
【问题描述】:
我的问题是 ConstraintLayout 内的组件溢出屏幕。我的应用程序一直有效,最近我没有对这些布局进行更改。现在,按钮和视图向右和向下移动。组件上的约束就像布局更大一样。突然,这个问题出现在没有更新应用的 S10、S9 和 A70 上。
错误截图
普通屏幕截图
截屏后,布局有点恢复正常
播放按钮应该以 x 和 y 为中心。约束在父视图中都为 0。移除广告按钮左右均等地受到限制,并且仅从顶部开始。底部的按钮数组都在一个视图中,左右均等约束,并且仅从底部开始。
我注意到的一件事是,在我的 S10 上,显示设置为 3040x1440 或 2280x1080。我目前将其设置为 3040x1440。似乎组件向右移动刚好足以适合它们位于 3040x1440 的中心,但我们只看到屏幕的前 2280x1080 像素。
这个问题也与应用程序现在出现在底部的游戏导航栏的事实不谋而合。我以前从未见过我的应用带有这个导航栏。在出现此问题的三部手机上,游戏导航栏以前从未出现过,并且在引入导航栏后问题就开始出现。我无法控制这一点。
我能够恢复到所需的正常布局的一种方法是退出应用程序并通过最近打开的应用程序或应用程序图标返回应用程序。然后,布局是正常的,直到我更改活动。然后,下一个活动也开始了。
应用程序中的所有活动都在清单中设置为“纵向”。我的所有活动都使用 ConstraintLayout 作为其主要布局,但并非所有活动都遇到此问题。
当第一次报告该错误时,我试图重现它。我能够重现该错误的唯一方法是让应用程序在分屏中打开,打开第二个应用程序,将设备横向切换到横向模式,然后通过扩展我的应用程序关闭第二个应用程序。手机从横向变为纵向和全屏这一事实使其展现了您在此处看到的表现。
我认为这与游戏导航栏的更新有关,因为从昨天到今天,应用程序实际上没有任何变化,现在这个问题存在。
我尝试了什么:
我尝试不隐藏导航栏,也不通过评论此代码使应用全屏显示:
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
这不起作用,游戏导航栏存在并且 UI 仍然溢出。
因为问题似乎来自应用程序认为它是水平的这一事实,所以我尝试将其添加到受影响的活动中:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
但这不起作用。
遇到此错误的一个活动没有比此处显示的更多的 UI 相关代码,因此我认为该错误不在我的代码中,因为该应用程序已经运行了几个月。
【问题讨论】:
标签: android android-layout user-interface layout android-constraintlayout