Android代码启动分屏模式时,能否控制分屏比例为30/70?
Android 分屏启动自定义30/70比例实现方案
结论
可以实现,但仅支持Android 12(API 31)及以上版本,低版本系统无官方API支持自定义启动时分屏比例。
可行实现方法(Android 12+)
Android 12引入了ActivityOptions.setLaunchBounds(Rect) API,可直接指定启动时Activity的窗口边界,以此控制分屏比例。具体步骤如下:
计算目标分屏区域的Rect
根据屏幕尺寸计算30/70比例对应的边界,以横向分屏(左侧占30%)为例:val displayMetrics = resources.displayMetrics val screenWidth = displayMetrics.widthPixels val screenHeight = displayMetrics.heightPixels // 左侧30%宽度的分屏区域 val launchBounds = Rect(0, 0, (screenWidth * 0.3).toInt(), screenHeight)启动Activity时传入配置
将计算好的launchBounds通过ActivityOptions传入启动逻辑:val intent = Intent(this, TargetActivity::class.java) val options = ActivityOptionsCompat.makeBasic() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { options.launchBounds = launchBounds } startActivity(intent, options.toBundle())
为什么之前的方法无效?
manifest中的android:defaultHeight/android:maxHeight等标签:仅针对自由窗口模式,不作用于分屏模式。- Intent Flags:系统未提供控制分屏比例的Intent Flag。
ActivityOptionsCompat旧版本方法:Android 12之前的版本无相关API支持启动时分屏比例定制。
注意事项
- 系统可能会限制极端比例:部分设备或定制系统会设置分屏最小宽度(如320dp),若30%比例的宽度低于该阈值,系统会自动调整到允许的最小范围。
- 纵向分屏同理:若需要纵向分屏(顶部30%),只需调整Rect的上下边界即可。
低版本系统(Android 11及以下)
无官方API支持启动时自定义分屏比例,只能:
- 接受系统默认的50/50比例启动;
- 启动后引导用户手动调整分屏边界;
- 通过辅助功能模拟手势调整(需权限,不推荐用于正式应用)。
内容的提问来源于stack exchange,提问作者Walter Rezende
相关产品推荐
相关产品推荐

