效果预览
实现部分
1.找到Unity
工程内部的AndroidManifest.xml
进行改造,找到如下内容:
<activity android:name="com.unity3d.player.UnityCustomActivity" android:exported="true" android:label="@string/app_name" android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
2.在<activity>
标签里添加如下:
android:supportsPictureInPicture="true"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
对于标签的解释
android:supportsPictureInPicture="true"
:这个属性用于声明该 Activity 支持画中画模式。这样,当用户按下 Home 键或者切换到其他应用时,你的应用就有可能进入画中画模式。这个属性的值为布尔型,表示是否支持画中画模式。android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
:这个属性用于配置在特定配置更改时 Activity 是否应该被销毁并重新创建。在这里,你声明了在屏幕大小变化、最小屏幕大小变化、屏幕布局变化、屏幕方向变化时,Activity 不会被销毁,而是系统将调用 onConfigurationChanged 方法。这对于画中画模式很重要,因为在画中画模式下,屏幕大小和方向可能会发生变化。
修改后代码如下:
<activity android:name="com.unity3d.player.UnityCustomActivity"
android:supportsPictureInPicture="true" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
android:exported="true" android:label="@string/app_name" android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
3.编写一个Activity
继承自UnityPlayerActivity
,写入函数然后在Unity中显式调用即可,部分机型支持直接调用无需显式调用,函数如下:
/**
* 小窗悬浮
*/
public void EnterPIPMode() {
enterPictureInPictureMode(new PictureInPictureParams.Builder().build());
}