我有一个带有全屏SurfaceView(纵向)的游戏和在表面上连续呈现的线程。
SurfaceView 已初始化onCreate
,其大小由屏幕的宽度和高度(以像素为单位)确定。
创建后,它被设置为 Game Activity 的内容视图(无 XML 定义):
Bitmap frameBuffer = Bitmap.createBitmap(screenWidth, screenHeight, Config.ARGB_8888);
MySurfaceView renderView = new MySurfaceView(this, frameBuffer);
this.setContentView(renderView);
问题是,屏幕高度不包括 Display Cutouts(对于具有它们的设备)并且比允许的绘图屏幕高,因为 renderView 放置在 cutout 区域下方并且不使用它进行渲染。
我试图找到真实的screen height - display cutout height
,以便我可以使帧缓冲区具有那个高度。
你知道是否有办法获得显示切口区域高度onCreate
,就像我们能够获得导航/状态栏高度一样。下面是返回导航栏高度的片段:
Resources resources = getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
int navigationBarHeight = resources.getDimensionPixelSize(resourceId);
}
谢谢您的帮助!
- - 更新 - -
我将尝试进一步澄清这个问题:
1)onCreate
创建一个全屏人像SurfaceView,带有屏幕宽度和高度的尺寸(无XML)
2) API 级别 > 19 (KitKat) 启用沉浸式模式
3) 屏幕宽度和高度由 Display.getSize() 或 Display.getRealSize() 获取,具体取决于 API 级别
4)在具有顶部显示切口的设备上,视图自动放置在切口下方并且底部内容被剪切,这就是问题
5)我想得到 Display Cutout 的高度onCreate
,这样我就可以将 SurfaceView 的高度创建为screenHeight - displayCutoutHeight
。
6)问题归结为找到显示切口的高度。