如何在创建活动时获得显示剪切高度?

问题描述 投票:8回答:3

我有一个全屏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)问题归结为找到显示切口的高度。

android android-layout surfaceview android-9.0-pie display-cutouts
3个回答
2
投票

screenHeight - displayCutoutHeight返回WindowInsets.getDisplayCutout()对象(如果存在)。

要获得显示切口的边界矩形,您可以使用

DisplayCutout

它将为您提供屏幕上所有显示切口(非功能区域)的DisplayCutout.getBoundingRects()列表。

为了获得每个显示器切口的高度,

Rect

这也可能返回负值,因此请确保采用高度模数。

有关显示剪切支持的更多信息,请参阅以下链接:

Rect.height()

android:windowLayoutInDisplayCutoutMode

DisplayCutout

layoutInDisplayCutoutMode

WindowInsets


2
投票

似乎无法在onCreate中获取WindowInsets.getDisplayCutout()对象。你的WindowInsets必须首先贴在窗户上。所以你的选择是:

1.

Activity

2.

override fun onAttachedToWindow() {
    val cutout = window.decorView.rootWindowInsets.displayCutout
}

0
投票

停止阅读Android私有资源并停止调用getRealSize()。只需调用getSize(),您获得的值就可以使用了。

© www.soinside.com 2019 - 2024. All rights reserved.