【发布时间】:2019-02-10 20:20:06
【问题描述】:
我有一个全屏游戏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,就像我们能够获得导航/状态栏高度一样。下面是一个返回导航栏高度的sn-p:
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) 问题归结为找到 Display Cutout 的高度。
【问题讨论】:
标签: android android-layout surfaceview android-9.0-pie display-cutouts