unity5.x适配Android P刘海屏方案
最近项目有需要适配Android P的刘海屏,尝试在androidManifest.xml中进行了各种配置发现系统仍然自动两边留黑,刘海附近默认不绘制,最后方案是通过修改启动activity进行解决:
修改启动Activity
以下是MainActivity.java的源码:
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends UnityPlayerActivity{
@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
{
try
{
Window window = getWindow();
//设置页面全屏显示
WindowManager.LayoutParams lp = window.getAttributes();
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
//设置页面延伸到刘海区显示
window.setAttributes(lp);
}
catch (Exception e)
{
Log.e("activity", "not support layoutInDisplayCutoutMode!");
}
}
else
{
Log.w("activity", "not support layoutInDisplayCutoutMode!");
}
}
}
通过重载UnityPlayerActivity,在onCreate中对刘海屏进行延伸显示设置.
注意!!
layoutInDisplayCutoutMode 接口只有Android P才有,所以需要对SDK版本号进行判断,否则Android P以下的系统运行会崩溃.
因此必须加入如下判断代码:
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
生成jar包替代启动Activity
关于如何通过AndroidStudio生成jar包来进行启动activity替换,请见如下链接:
https://www.jianshu.com/p/8256c0da444a?tdsourcetag=s_pctim_aiomsg
unity2018的方案
unity官方在新版本中做了很方便的处理,只需要在Building Setting中把
Render outside safe area
勾上就可以了
- 操作系统:win10
- uniy版本:5.5.6f1
- AndroidStudio版本:3.3.1