如何编程调整自由形式模式下运行的第三方应用窗口(不重启不丢数据)
如何编程调整第三方应用窗口大小且不丢失数据
要调整Chrome、谷歌地图这类第三方应用的运行窗口大小,同时保留应用原有数据(无需重建应用),可按以下步骤实现:
1. 启用系统自由窗口支持
先通过ADB命令开启开发者模式下的相关设置,确保系统允许应用以可调整大小的窗口启动:
adb shell settings put global enable_freeform_support 1 adb shell settings put global force_resizable_activities 1
2. 编程启动应用并指定窗口大小
通过Kotlin代码,利用ActivityOptions配置应用的启动窗口模式和边界,以此指定窗口大小。以下是启动Chrome并设置全屏窗口的示例:
val intent = packageManager.getLaunchIntentForPackage("com.android.chrome") var options = ActivityOptions.makeBasic() try { // 反射调用隐藏API,设置为自由窗口模式(值为5) val method: Method = ActivityOptions::class.java.getMethod("setLaunchWindowingMode", Int::class.javaPrimitiveType) method.invoke(options, 5) } catch (_: Exception) {} // 定义窗口尺寸:此处为全屏,可按需修改Rect的左、上、右、下参数调整窗口大小 val windowSize = Rect( 0, 0, resources.displayMetrics.widthPixels, resources.displayMetrics.heightPixels ) options = options.setLaunchBounds(windowSize) startActivity(intent, options.toBundle())
关键说明:
setLaunchWindowingMode(5):通过反射调用隐藏的系统API,将应用设置为自由窗口模式,允许后续调整窗口大小。setLaunchBounds(windowSize):传入Rect对象定义窗口的具体位置和尺寸,修改四个坐标值即可自定义窗口大小。- 该方式在应用启动时指定窗口参数,启动后应用原有数据会正常保留,无需重建应用。
内容的提问来源于stack exchange,提问作者Ilyama
相关产品推荐
相关产品推荐

