画中画模式笔记

本文详细介绍了安卓画中画模式的实现方法,包括通过设置AndroidManifest.xml文件中的属性来开启支持,以及如何监听和进入画中画模式。同时,讨论了在画中画模式下用户交互的限制,建议在进入该模式时简化界面,提高用户体验。此外,还提到了系统对画中画模式下界面控件的处理和自定义按钮的限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

画中画模式

实现

可以通过hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)判断系统是否支持画中画模式

系统默认情况下不会为应用提供画中画支持。通过在Manifest.xml文件中为activity标签添加android:supportsPictureInPictureandroid:resizeableActivitytrue来实现。建议指定Activity布局配置,以防在布局发生变化时触发Activity重启

如:

<manifest
    ... >
    
    <application
        ...>
        
        <activity
            android:name=".MainActivity"
            android:resizeableActivity="true"
            android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation">
            
            <intent-filter>
                ...
            </intent-filter>
    </application>
</manifest>

注册后,即可在Activity中调用enterPictureInPictureMode(PictureInPictureParams params)来进入画中画模式

void pipMode(){
    PictureInPicture params = new PictureInPictureParams.Builder()
    .setAspectRatio(new Rational(3, 4)  //横宽比3:4
    .build()
    enterPictureInPictureMode(params);
}
fun pipMode(){
    val params = PictureInPictureParams.Builder
        .aspectRatio(Rational(3, 4)) //横宽比3:4
    enterPictureInPictureMode(params)
}

在一些情况下,我们需要检测用户使用最近应用按钮或者主屏幕按钮时自动进入画中画模式。我们可以通过重写onUserLeaveHint()来实现监听

@Override
public void onUserLeaveHint(){
    if (isPipWhenExit)  //若确定需要进入画中画模式
        pipMode();
}
override fun onUserLeaveHint(){
    if (isPipWhenExit)  //若确定需要进入画中画模式
        pipMode()
}

监听状态

可以通过Activity#isInPictureInPictureMode()判断当前是否在画中画模式
画中画模式是多窗口模式的特例。如果Activity.isInPictureInPictureMode()返回 true,则Activity.isInMultiWindowMode()也返回 true。

当进入或退出画中画模式时,系统进入Activity#onPictureInPictureModeChanged(boolean isInPictureInPictureMode)Fragment#onPictureInPictureModeChanged(boolean isInPictureInPictureMode)

应注意,在画中画模式下,由于画面在一个小窗口中展示,用户可能看不清细节信息,所以不会与界面元素交互。建议在进入画中画模式后将界面转入极简模式,移除多余界面元素,并在恢复全屏时恢复这些元素

交互

画中画模式中,用户不能直接与界面进行交互。如果应用有一个活跃的媒体绘画,窗口会在点击时显示播放、暂停、下一个和上一个等控件。

当让也可以在创建PictureInPictureParams时使用PictureInPictureParams#Builder#setActions(List<RemoteAction> actions)来添加按钮。若添加的按钮控件数量超过getMaxNumPictureInPictureActions(),系统只会添加上限数量的按钮

应注意,当进入画中画模式时,系统会调用Activity#onPause()方法,因此当使用画中画模式时,应注意是否错误的回收了部分内容

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值