在Android 11之前,我已经很容易地将我的应用程序调整为全屏
我的旧手机有摄像头孔和底座按钮在屏幕区域外,我的新手机有一个摄像头孔和基本按钮在屏幕内。
由于设置不多,我的应用程序在旧手机上是全屏的。
Styles.xml
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>AndroidManifest.xml
<application
...
android:theme="@style/AppTheme.NoActionBar">
</application>在我使用安卓11的新手机中,我搜索了许多Stackoverflow问题。我尝试过很多不同的解决方案。最后,我在OnCreate()的开头输入了下面的代码。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
window.attributes.layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
WindowCompat.setDecorFitsSystemWindows(window, false)
else {
@Suppress("DEPRECATION")
window.setFlags(
WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN
)
}我想在基本按钮和摄像头孔附近有一个狭窄的边缘,就像Chrome一样。
但我所能得到的只是应用程序和按钮之间(向下)和应用程序与相机孔之间(向上)之间的很大差距:

但我想要一个很小的差距:

类似于用于Android的Chrome浏览器:

我怎样才能用程序来完成这个任务呢?
我在互联网(和StackOverflow)上找不到一个关于我的问题的线索。
我也无法确定如何识别给定的手机是否在屏幕上有摄像头孔,或者它是否有屏幕上的基本按钮。看起来它是基于DisplayCutout、WindowInsets、boundingRectTop和boundingRectBottom的,但在互联网上并没有真正的、明确的使用实例。
发布于 2022-06-30 13:54:18
这个答案会让许多人感到惊讶,就像它让我感到惊讶一样。这是几个月,几个月的尝试和错误,失败的帮助请求,直到我自己找到解决方案。
这是一个令人不安的简单,但同时,它是银河系中最复杂的事情,包括大胆尝试它。
魔法和秘密线是:
<meta-data android:name="android.max_aspect" android:value="2.4"/>2.4是屏幕上应用程序区域允许的最大screen height / screen width。
如果省略这条语句,系统仍然会假设,其最大高宽比为1.86。
如果今天很多设备的screen height /screen width比率都大于1.86,我不知道为什么系统会假设默认值这么低。
根据我在问题中所写的,我们确实需要改变Android的标准样式之一
所以在styles.xml
<style name="AppTheme"> parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>在AndroidManifest.xml中包括
<application
...
android:theme="@style/AppTheme">
<meta-data android:name="android.max_aspect" android:value="2.4"/>
...
<\application> 这都是..。
我在这个主题上找到的唯一的远程参考是在这帖子2017年页面的开发人员的官方博客上。
https://stackoverflow.com/questions/70948103
复制相似问题