我有一个全屏qazxsw poi(肖像)和线程的游戏,在表面上连续呈现。
SurfaceView初始化为SurfaceView,其大小由屏幕的宽度和高度(以像素为单位)决定。
创建后,将其设置为游戏活动的内容视图(无XML定义):
onCreate
问题是,屏幕的高度不包括显示切口(对于具有它们的设备)并且比允许的绘图屏幕高,因为renderView位于切口区域下方并且不用于渲染。
我寻找真正的Bitmap frameBuffer = Bitmap.createBitmap(screenWidth, screenHeight, Config.ARGB_8888);
MySurfaceView renderView = new MySurfaceView(this, frameBuffer);
this.setContentView(renderView);
,以便我可以使帧缓冲区具有那个高度。
你知道是否有办法获得显示切口区域高度screen height - display cutout height
,就像我们能够获得导航/状态栏高度一样。以下是返回导航栏高度的代码段:
onCreate
谢谢您的帮助!
---更新---
我会尝试更多地澄清这个问题:
1)Resources resources = getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
int navigationBarHeight = resources.getDimensionPixelSize(resourceId);
}
一个全屏肖像SurfaceView是用屏幕宽度和高度的尺寸创建的(没有XML)
2)API级别> 19(KitKat)启用沉浸模式
3)屏幕宽度和高度采用Display.getSize()或Display.getRealSize()取决于API级别
4)在具有顶部显示切口的设备上,视图自动放置在切口下方,底部内容被剪切掉,这就是问题所在
5)我想获得Display Cutout onCreate
的高度,这样我就可以将SurfaceView高度创建为onCreate
。
6)问题归结为找到显示切口的高度。
screenHeight - displayCutoutHeight
返回WindowInsets.getDisplayCutout()
对象(如果存在)。
要获得显示切口的边界矩形,您可以使用
DisplayCutout
它将为您提供屏幕上所有显示切口(非功能区域)的DisplayCutout.getBoundingRects()
列表。
为了获得每个显示器切口的高度,
Rect
这也可能返回负值,因此请确保采用高度模数。
有关显示剪切支持的更多信息,请参阅以下链接:
Rect.height()
似乎无法在onCreate中获取WindowInsets.getDisplayCutout()对象。你的WindowInsets
必须首先贴在窗户上。所以你的选择是:
1.
Activity
2.
override fun onAttachedToWindow() {
val cutout = window.decorView.rootWindowInsets.displayCutout
}
停止阅读Android私有资源并停止调用getRealSize()。只需调用getSize(),您获得的值就可以使用了。