Unreal发布Android在刘海屏手机上不能全屏显示问题

Unreal 4.27发布Android在刘海屏手机上不能全屏显示问题

Android设置全屏

AndroidManifest.xml文件配置

    ...
    <activity android:name="com.epicgames.ue4.GameActivity" android:label="@string/app_name" android:theme="@style/UE4SplashTheme" android:configChanges="mcc|mnc|uiMode|density|screenSize|smallestScreenSize|screenLayout|orientation|keyboardHidden|keyboard" android:resizeableActivity="false" android:launchMode="singleTask" android:screenOrientation="sensorLandscape" android:debuggable="true">
      <meta-data android:name="android.app.lib_name" android:value="UE4" />
    </activity>
    <activity android:name=".DownloaderActivity" android:screenOrientation="sensorLandscape" android:configChanges="mcc|mnc|uiMode|density|screenSize|orientation|keyboardHidden|keyboard" android:theme="@style/UE4SplashTheme" />
   <meta-data android:name="android.max_aspect" android:value="2.4" />
   ...

其中设置android:resizeableActivity="false",增加<meta-data android:name="android.max_aspect" android:value="2.4" />,默认最大的宽高比是2,现在很多手机超过这个宽高比,所以可以设置更大的宽高比。
Unreal不能直接修改AndroidManifest.xml文件,需要通过Project Setting->Platforms->Android->Advanced APK Packaging进行设置。
实际上,我们不需要修改AndroidManifest.xml,在Project Setting->Platforms->Android->APK Packaging有选项设置。
在这里插入图片描述
以上两个选项设置允许全屏和最大宽高比,但不适合刘海屏全屏。因为刘海屏的刘海并不属于常规全屏的一部分。

刘海屏全屏设置

Unreal 4.27是有选项直接设置刘海屏全屏显示的。
在这里插入图片描述

但测试很多手机都不能在刘海屏显示。

4.27设置刘海屏在部分手机不能显示问题

问题出在打包的Java程序里
在这里插入图片描述
打开上面的java文件,可以看到java代码里还有机型测试。

		// allow certain models for now to use full area around cutout
		boolean BlockDisplayCutout = true;
		if (android.os.Build.MANUFACTURER.equals("HUAWEI"))
		{
			BlockDisplayCutout = false;
		}
		else if (android.os.Build.MANUFACTURER.equals("HMD Global"))
		{
			String model = android.os.Build.MODEL;
			if (model.equals("Nokia 8.1"))
			{
				BlockDisplayCutout = false;
			}
		}
		else if (android.os.Build.MANUFACTURER.equals("samsung"))
		{
			String model = android.os.Build.MODEL;
			if (model.startsWith("SM-G970") || model.startsWith("SM-G973") || model.startsWith("SM-G975") ||
				model.startsWith("SC-03L") || model.startsWith("SCV41") || model.startsWith("SC-04L") ||
				model.startsWith("SCV42") || model.startsWith("SM-N97") || model.startsWith("SM-F700") ||
				model.startsWith("SM-G98") || model.startsWith("SCV47") || model.startsWith("SCG01") ||
				model.startsWith("SCG02") || model.startsWith("SC-51A") || model.startsWith("SC-52A") ||
				android.os.Build.VERSION.SDK_INT >= 28)
			{
				BlockDisplayCutout = false;
			}
		}
		else if (android.os.Build.MANUFACTURER.equals("Xiaomi"))
		{
			String model = android.os.Build.MODEL;
			if (model.startsWith("POCOPHONE F1"))
			{
				BlockDisplayCutout = false;
			}
		}
		else if (android.os.Build.MANUFACTURER.equals("OnePlus"))
		{
			String model = android.os.Build.MODEL;
			if (model.startsWith("IN2020") || model.startsWith("IN2021") || model.startsWith("IN2023") ||
				model.startsWith("IN2025") || model.startsWith("IN2010") || model.startsWith("IN2011") ||
				model.startsWith("IN2013") || model.startsWith("IN2015") || model.startsWith("IN2017") ||
				model.startsWith("IN2019") || model.startsWith("AC2001") || model.startsWith("AC2003") ||
				model.startsWith("BE2025") || model.startsWith("BE2026") || model.startsWith("BE2028") ||
				model.startsWith("BE2029"))
			{
				BlockDisplayCutout = false;
			}
		}
		if (BlockDisplayCutout)
		{
			UseDisplayCutout = false;
		}

UseDisplayCutout从打包参数接收设置,但以上java代码又做了机型判断,如果机型不在目录中,UseDisplayCutout会被强制设置为false。

		if (BlockDisplayCutout)
		{
			UseDisplayCutout = false;
		}

那么,我们只要修改这个代码,把强制设置UseDisplayCutout = false注释掉应该就可以显示刘海屏了。

直接修改Intermediate\Android\arm64\src\com\epicgames\ue4\SplashActivity.java文件是无用的,Intermediate目录下的文件在编译的时候会被新生成代码覆盖掉的。
我们需要把Intermediate\Android\arm64\src\com\epicgames\ue4\SplashActivity.java文件拷贝到Build\Android\src\com\epicgames\ue4\SplashActivity.java(如果已经有了,就不用拷贝了),然后修改Build\Android\src\com\epicgames\ue4\SplashActivity.java才行。

		if (BlockDisplayCutout)
		{
			// UseDisplayCutout = false;
		}

经过以上设置,实际测试可以在OPPO手机上正常显示刘海屏全屏了。

相关推荐

  1. Android 横竖切换 窗口

    2024-03-14 09:42:05       38 阅读
  2. Android去除折叠两边的黑边,默认显示

    2024-03-14 09:42:05       31 阅读
  3. react 显示实现

    2024-03-14 09:42:05       18 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-14 09:42:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-14 09:42:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-14 09:42:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-14 09:42:05       18 阅读

热门阅读

  1. vue中使用video.js,且可以截图、录制和下载视频

    2024-03-14 09:42:05       39 阅读
  2. CSS 01

    CSS 01

    2024-03-14 09:42:05      17 阅读
  3. Rust 如何优雅关闭 channel

    2024-03-14 09:42:05       25 阅读
  4. 【MySQL 系列】MySQL 函数篇

    2024-03-14 09:42:05       21 阅读
  5. SQL进阶(五):With 函数 vs 视图函数

    2024-03-14 09:42:05       20 阅读
  6. 【 React 】React 中引入css的方式有哪几种?区别?

    2024-03-14 09:42:05       20 阅读
  7. CSS常见选择器

    2024-03-14 09:42:05       19 阅读
  8. vue进阶——动态引入组件

    2024-03-14 09:42:05       19 阅读
  9. 大带宽服务器的作用有哪些?

    2024-03-14 09:42:05       18 阅读
  10. 本地socket通信服务器,客户端

    2024-03-14 09:42:05       20 阅读
  11. 【无标题】

    2024-03-14 09:42:05       18 阅读
  12. C#中IEnumerable<string>和IList<string>的区别

    2024-03-14 09:42:05       19 阅读
  13. C# 中多线程锁的使用经验

    2024-03-14 09:42:05       18 阅读
  14. ffmpeg的使用不简单

    2024-03-14 09:42:05       23 阅读
  15. 小结:Node.js Express VS Koa

    2024-03-14 09:42:05       21 阅读
  16. AcWing 503. 借教室(每日一题)

    2024-03-14 09:42:05       18 阅读