news 2026/5/6 4:11:26

安卓demo-折叠屏平行视界适配(embedding方案)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
安卓demo-折叠屏平行视界适配(embedding方案)

功能描述

2个活动页左右分屏展示。可适配的厂商有:华为/vivo/oppo/荣耀/三星/小米。大部分安卓系统都支持embedding。

步骤

1、添加em依赖的WindowManager包,目前官方稳定版是window1.3

implementation('androidx.window:window:1.3.0')

2、使用jetpack startup库在加载应用的其他组件和启动activity之前执行初始化。这里使用startup加载em配置文件

implementation('androidx.startup:startup-runtime:1.2.0')

3、配置分屏规则main_split_config.xml,将其放到res/xml目录下

<!-- main_split_config.xml --> <resources xmlns:window="http://schemas.android.com/apk/res-auto"> <!-- Define a split for the named activities. --> <SplitPairRule window:clearTop="true" window:splitMinWidthDp="600" window:splitRatio="0.5"> <SplitPairFilter window:primaryActivityName=".MainActivity" window:secondaryActivityName=".AActivity" /> <SplitPairFilter window:primaryActivityName=".MainActivity" window:secondaryActivityName="*" /> </SplitPairRule> <!-- Specify a placeholder for the secondary container when content is not available. --> <SplitPlaceholderRule window:placeholderActivityName=".PlaceholderActivity" window:splitMinWidthDp="600" window:splitRatio="0.33"> <ActivityFilter window:activityName=".PlaceholderActivity" /> </SplitPlaceholderRule> <!-- Define activities that should never be part of a split. Note: Takes precedence over other split rules for the activity named in the rule. --> <ActivityRule window:alwaysExpand="true"> <ActivityFilter window:activityName=".FullActivity" /> </ActivityRule> </resources>

4、创建分屏启动类去加载xml分屏配置文件main_split_config.xml

package com.lwj.embeddingtest; import android.content.Context; import android.util.Log; import androidx.annotation.NonNull; import androidx.startup.Initializer; import androidx.window.embedding.RuleController; import androidx.window.embedding.SplitController; import java.util.Collections; import java.util.List; public class SplitWindowInitializer implements Initializer<RuleController> { private static final String TAG = "SplitWindowInitializer"; @NonNull @Override public RuleController create(@NonNull Context context) { Log.d(TAG, "create: is support embedding = " + SplitController.getInstance(context).getSplitSupportStatus()); RuleController ruleController = RuleController.getInstance(context); ruleController.setRules(RuleController.parseRules(context, getResId(context, "xml", "main_split_config"))); return ruleController; } @NonNull @Override public List<Class<? extends Initializer<?>>> dependencies() { return Collections.emptyList(); } public static int getResId(Context context, String type, String name) { return context.getResources().getIdentifier(name, type, context.getPackageName()); } }

5、在应用的AndroidManifest.xml里面增加provider在应用创建的时候去调分屏启动类加载xml分屏相关配置信息

<provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" android:exported="false" android:multiprocess="true" tools:node="merge"> <meta-data android:name="com.lwj.embeddingtest.SplitWindowInitializer" android:value="androidx.startup" /> </provider>

6、在应用的AndroidManifest.xml里面增加一些其他embedding配置

<meta-data android:name="embedded" android:value="true" /> <property android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED" android:value="true" /> <!-- 允许系统 activity 嵌入--> <property android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE" android:value="true" />

状态监听&获取

可通过onConfigurationChanged来监听平行视界状态变化,通过ActivityEmbeddingController.getInstance(this).isActivityEmbedded(this));来判断当前activity是否处于平行视界状态

@Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d(TAG, "onConfigurationChanged: " + ActivityEmbeddingController.getInstance(this).isActivityEmbedded(this)); }

效果视频

embedding分屏效果

代码

https://gitee.com/flying-guy/daily-practice/tree/master/AndroidProject/EmbeddingTest

遇到的问题

  • 小米12及其以上版本不兼容easygo方案,只兼容embedding方案
  • 系统设置里面没有开关打开关闭平行视界模式,适配以后startactivity屏幕尺寸够大且匹配到了就会开启分屏,没找到相关api
  • easygo方案和embedding方案同时存在时可能会冲突。

vivo官网说的是需要联系关一个,vivo优先级easygo>embedding

oppo是系统根据ROM的版本优先支持原生的em,即优先级embedding>easygo

荣耀也是easygo>embedding,不过荣耀可以在xml里面增加属性配置增加em优先级

<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application> <property android:name="com.hihonor.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_FIRST" android:value="true" /> </application> </manifest>

相关官方文档

华为easygo适配文档

文档中心

vivo easygo&折叠屏相关文档

vivo开放平台

oppo easygo开发文档

OPPO 开放平台-OPPO开发者服务中心

oppo embedding开发文档

OPPO 开放平台-OPPO开发者服务中心

荣耀easygo开发文档https://developer.honor.com/cn/docs/adaptation_guide/guides/mw_adaptation_guide

荣耀embedding开发文档

https://developer.honor.com/cn/docs/adaptation_guide/guides/ae_adaptation_guide

小米embedding开发文档

文档中心

安卓官网embedding

Activity 嵌入 | Views | Android Developers

折叠屏适配金标联盟

金标联盟 | ITGSA | 移动智能终端生态联盟

三星embedding适配

三星远程开发测试平台-Activity embedding(应用内分屏)适配指导

windowx变更(embedding主要依赖windowx里面的方法,其中androidx.window:window:1.1.0-alpha02和androidx.window:window:1.3.0差异较大,现在实现的方案是使用稳定版包androidx.window:window:1.3.0)

WindowManager | Jetpack | Android Developers

easygo

easygo可参考华为官方文档,一套下来可适配华为、oppo、vivo、荣耀。不过与embedding相比,api没embedding那么多,稳定性差点,比如平行视界多进程时,进程间跳转容易跳不回原来的进程直接退回桌面。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 4:10:52

Poseidon日志处理流水线:从原始数据到可搜索索引的完整流程

Poseidon日志处理流水线&#xff1a;从原始数据到可搜索索引的完整流程 【免费下载链接】poseidon A search engine which can hold 100 trillion lines of log data. 项目地址: https://gitcode.com/gh_mirrors/pose/poseidon Poseidon是一款高性能日志搜索引擎&#x…

作者头像 李华
网站建设 2026/5/6 4:10:35

Open UI5 源代码解析之1303:PreventKeyboardScrolling.js

源代码仓库: https://github.com/SAP/openui5 源代码位置:src\sap.ui.integration\src\sap\ui\integration\delegate\PreventKeyboardScrolling.js PreventKeyboardScrolling 文件详细解析 文件定位与整体判断 PreventKeyboardScrolling 位于 sap.ui.integration 子项目…

作者头像 李华
网站建设 2026/5/6 4:00:28

探索jeecg-boot前端状态管理:Pinia响应式原理与最佳实践

探索jeecg-boot前端状态管理&#xff1a;Pinia响应式原理与最佳实践 【免费下载链接】jeecg-boot AI低代码平台&#xff0c;支持「低代码 零代码」双模式&#xff1a;零代码 5 分钟搭建业务系统&#xff0c;低代码模式一键生成前后端代码。 内置AI 应用&#xff0c;支持AI聊天…

作者头像 李华
网站建设 2026/5/6 3:58:27

Modern JavaScript Cheatsheet包管理终极指南:npm和yarn最佳实践

Modern JavaScript Cheatsheet包管理终极指南&#xff1a;npm和yarn最佳实践 【免费下载链接】modern-js-cheatsheet Cheatsheet for the JavaScript knowledge you will frequently encounter in modern projects. 项目地址: https://gitcode.com/gh_mirrors/mo/modern-js-c…

作者头像 李华