一、概述
1.小米Flip设备介绍
折叠屏是一种柔性屏,可以进行弯曲、折叠,比如上下折叠,左右折叠等。Xiaomi MIX Flip 为上下折叠设备,设备形态如下:
- 展开态:设备完全展开后的形态,屏幕尺寸与直屏手机类似,使用体验与普通直屏手机相同。
- 折叠态:设备折起后的形态,屏幕尺寸较小。外屏屏幕在背板上半部分,除摄像头区域外均为可显示区域。
- 半折态:又称悬停态,屏幕未完全展开的形态,可以如支架一样悬停平稳放置,显示内容。

内外屏屏幕尺寸与分辨率参数如下:
机型 | 外屏 | 内屏 | ||
尺寸 | 分辨率 | 尺寸 | 分辨率 | |
Xiaomi MIX Flip | 4.01英寸 | 1392 x 1208 | 6.86英寸 | 2912 x 1224 |
2.文档适用对象
需要适配小米Flip设备的第三方开发者、产品经理、设计师、测试工程师等。
二、UX设计与软件形态适配建议
1.基础适配
1.1 外屏基础适配
1.1.1基础框架介绍
- 启动方式:外屏支持桌面,App能够以应用形式在外屏启动。
- 支持方向:支持摄像头朝上和朝下两个方向使用。横屏无需特殊适配,与内屏保持一致即可。

1.1.2 分区设计
基于外屏形态,系统将外屏屏幕划分为两个区域:系统区和应用区。

- 应用区适配
如图蓝色区域,支持在该区域内进行应用中的内容展示和页面操作,此区域大小为809 x 1392px,比例大小与内屏小窗形态类似,适配建议如下:
1)内容展示
外屏应用的核心功能及内容应当与内屏保持一致。必要时,可对内屏非主要信息进行一定删减,以获得在外屏小屏上更好的展示体验。
2)布局建议
外屏屏幕尺寸较小,当信息过多时,建议在保障识别性的前提下,适当调整布局排列方式、元素尺寸或间距。推荐尽量使用上下单列布局方式,避免左右布局导致操作按钮、文字拥挤。以按钮为例,如下图所示。

3)视觉规范
显示时需保证文字、图片、视频的完整显示,可以正常阅读,避免出现裁切、重叠等问题。推荐最大字号不大于50dp,最小字号不小于11dp,以保证内容的可读性。
- 系统区适配

如图黄色+绿色区域,非进阶适配情况下仅系统可使用此区域,不应出现应用内相关的内容及操作。在特殊情况下,需要应用对背景色区域的颜色进行适配,说明如下:
1)背景色
如图黄色区域,为保持屏幕一体观感,背景色需与应用区页面的主体颜色保持一致。
系统默认读取应用在「经典导航键」中的背景色进行适配。当系统取色与应用页面主体颜色差异较大时,需要应用进行适配,适配方法可见章节「三-4 系统区背景色适配」。
2)小部件
如图绿色区域,由系统进行开发,展示天气、时间、日历等信息,应用无需适配。
1.2 连续性适配

设备支持「从外屏切换到内屏」以及「从内屏切换到外屏」的连续性
- 外屏切换到内屏:外屏在前台使用应用时,展开设备,内屏自动接续展示外屏在使用的应用。
- 内屏切换到外屏:内屏在前台使用应用时,合上设备,若应用支持外屏,外屏接续展示内屏正在使用的应用。
连续性适配要求:
- 页面元素:需能够根据屏幕尺寸的变化实时调整位置,动态适配内外屏不同尺寸大小的屏幕。
- 页面内容:需在切换前后保持一致,避免出现信息流刷新、自动返回到应用首页等情况。
- 页面布局:需在切换后的屏幕上保持正常显示,避免出现半屏裁切、页面元素不可见、控件间距过大/过小、文字/图片大小宽度与屏幕不匹配、功能按钮不可用等情况。
2.进阶适配
因外屏屏幕空间较小,直接将内屏页面等比缩小难以获得良好的使用体验。为获得更好的小屏使用体验,与设备形态融合,推荐对应用的部分页面进行全屏适配,适配建议如下:
2.1 页面选取
推荐应用多数页面仍保留等比缩小的基础适配方式,选取沉浸场景或具有一定美观氛围属性的页面进行全屏适配,以获得特定页面、场景下更好的小屏使用体验。
2.2 内容展示
推荐对页面功能进行适当精简以进行更好的小屏布局,仅保留最核心的MVP功能。尽量不要在外屏放置外屏无法支持的功能入口,若需放置,可接入系统接口,由系统统一给用户提供展开到内屏的操作提示,适配方法可见章节「三-3 连续性适配」。
2.3 布局建议
整屏区域均展示应用内容,不再展示系统小部件。
支持将应用画面、文字信息或核心操作按钮放置在摄像头下方,使得应用区域获得更大更简洁的显示空间。
需注意,在展示主要内容时,距离屏幕边缘需预留一定安全距离,仅展示背景色,不展示应用内容或交互按钮。距离大小如下图红色区域标注。

以音乐应用举例

- 页面选取:选取音乐沉浸播放页面,结合设备形态进行全屏适配。
- 内容展示:精简页面功能,仅保留切歌、播放暂停、播放模式等核心歌曲操作功能,保证页面元素简洁干净。
- 页面布局:
- 播放器操作区域和屏幕等宽,功能按钮布局与内屏类似,防止因拥挤导致误触。
- 歌词页面在摄像头旁边区域展示,字体大小易于阅读。
- 歌曲播放时,围绕摄像头有音乐曲线波动,结合摄像头模拟迷你小音箱,布局更和谐有趣。
三、基础适配开发指南
1.设备识别方法
1.1 反射调用
1)该接口从Android U版本开始支持
2)部分小米机型未集成该接口,所以反射调用时最好不要抛异常
1.2 接口定义
Public static methods | |
boolean | isFoldDeviceInside() 返回是否是横向内折设备(FOLD)。形态如Xiaomi MIX Fold 2, Xiaomi MIX Fold 3 |
boolean | isFoldDeviceOutside() 返回是否是横向外折设备。 |
boolean | isFoldDevice() 返回是否是横向折叠设备。包含所有横向折叠设备类型,如横向内折,横向外折 |
boolean | isRearDevice() 返回是否是存在背屏的设备。形态如Xiaomi 11 Ultra |
boolean | isFlipDevice() 返回是否是竖向折叠设备(Flip)。形态如小米MIX Flip |
1.3 使用方式
以isFlipDevice()方法为例。可以通过反射调用获取设备类型
private static boolean isFlipDeviceTest() {
boolean isFlip = false;
try {
Class<?> c = Class.forName("miui.util.MiuiMultiDisplayTypeInfo");
Method m = c.getMethod("isFlipDevice");
Object object = m.invoke(c);
if (object instanceof Boolean) {
isFlip = (boolean) object;
}
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException |
InvocationTargetException e) {
e.printStackTrace();
}
return isFlip;
}
2.折叠展开态获取
折叠屏折叠和展开对应Display的尺寸变化,系统通过onConfigurationChanged通知应用更新布局。应用可在onConfigurationChanged中获取自身的WindowMetrics来动态自适应布局,不需要获取折叠和展开的状态。
3.连续性适配
3.1 适配建议
折叠连续性的定义:应用在可折叠设备上运行时,当屏幕发生折叠/展开动作,处于前台的应用会从一个屏幕转换到另一个屏幕,为提供出色的用户体验,确保当前应用在转换后能连续无缝、正常地运行,应用应在同一位置以相同状态恢复,并且依然保持良好可用的UI布局。
三方应用需在 AndroidManifest.xml 文件的 application层级中添加 android.supports_size_changes
或者miui.supportAppContinuity
属性,以便声明应用支持连续性。
<application>
<meta-data
android:name="android.supports_size_changes"
android:value="true" />
</application>
<application>
<meta-data
android:name="miui.supportAppContinuity"
android:value="true" />
</application>
Activity的配置应该尽量支持resizeableActivity。应用需要在 AndroidManifest.xml 文件的 application 或者 activity 标签中添加 resizeableActivity=true 的属性。若应用不支持多窗口(例如小窗、分屏等)而声明了resizeableActivity=false,则在折叠屏折叠/展开场景中,可能出现UI布局问题或者进入到原生的安卓兼容模式(SizeCompatMode)。
<application
android:resizeableActivity="true">
<activity
android:resizeableActivity="true" />
</application>
若应用的 targetSDK 为 24 或以上,即便不设置 resizeableActivity 属性,其默认值也为 true。在设备发生屏幕切换后,应用应能妥善地保存界面状态或者支持配置变更。
- 保存界面状态
在应用Activity 被系统销毁重走生命周期时,应用需要及时保存和恢复 Activity 的界面状态,应用可以在 onSaveInstanceState 和 onRestoreInstanceState 方法中保存和恢复数据状态。
@Overridepublic void onSaveInstanceState(@NonNull Bundle outState, @NonNull PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
}
@Overrideprotected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
- 支持配置变更
应用也可以支持配置变更,保持 Activity 不重走生命周期,这时需要应用在 AndroidManifest.xml 中配置如下 configChanges 属性。
<activity android:configChanges="screenSize|smallestScreenSize|screenLayout" />
添加 android:configChanges 后,Activity 或者 Fragment 就会收到 onConfigurationChanged() 的回调,此方法会收到传递的Configuration对象,从而指定新设备配置。通过读取Configuration
中的字段确定新配置,然后通过更新界面所用资源进行适当的更改。调用此方法时,Activity 的Resources对象会相应地进行更新,并根据新配置返回资源,以便您在系统不重启 Activity 的情况下轻松重置界面元素。
代码示例:
@Overridepublic void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Toast.makeText(this, "onConfigurationChanged newWidth=" + newConfig.screenWidthDp + ", newHeight=" + newConfig.screenHeightDp, Toast.LENGTH_SHORT).show();
}
MIUI针对折叠屏设备新增了针对app侧的wm_on_configuration_changed_called回调EventLog,结合系统侧configuration_changed回调EventLog日志和"Config changes"调用的SystemLog,可以方便您快速定位、排查与onConfigurationChanged回调有关的问题。
Log示例:
// 系统侧触发configurationChanged事件日志(EventLog)
07-20 12:43:31.521 1000 2677 2778 I configuration_changed: 536874240
// App侧触发configurationChanged回调事件日志(EventLog),4个参数分别代表userId、目标Activity、Configuration、耗时。
07-20 12:43:31.701 10086 5585 5585 I wm_on_configuration_changed_called: [0,com.miui.home.launcher.Launcher,{1.0 ?mcc?mnc [zh_CN] ldltr sw696dp w696dp h738dp 440dpi lrg hdr widecg port ?pc finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 1914, 2160) mAppBounds=Rect(0, 0 - 1914, 2116) mMaxBounds=Rect(0, 0 - 1914, 2160) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=home mAlwaysOnTop=undefined mRotation=ROTATION_0 mInSplitScreen=false} as.2 s.24 fontWeightAdjustment=0 themeChanged=0 themeChangedFlags=0 extraData = Bundle[{}] dt/m/d},96]
// Config changes关键字SystemLog
07-14 09:54:11.891 2485-2638/system_process I/ActivityTaskManager: Config changes=20000d00 {1.0 ?mcc?mnc [zh_CN] ldltr sw696dp w696dp h738dp 440dpi lrg hdr widecg port ?pc finger -keyb/v/h -nav/h winConfig={ mBounds=Rect(0, 0 - 1914, 2160) mAppBounds=Rect(0, 0 - 1914, 2116) mMaxBounds=Rect(0, 0 - 1914, 2160) mWindowingMode=fullscreen mDisplayWindowingMode=fullscreen mActivityType=undefined mAlwaysOnTop=undefined mRotation=ROTATION_0 mInSplitScreen=false} as.2 s.8214 fontWeightAdjustment=0 themeChanged=0 themeChangedFlags=0 extraData = Bundle[{}] dt/s/d}
- 页面布局适配
Android 10 (API 级别 29) 或更高版本支持更多种宽高比。对于可折叠设备而言,设备类型可以是超长、超薄的屏幕(例如屏幕宽高比为 21:9 的折叠设备),也可以是 1:1 的屏幕,如要与尽可能多的设备兼容,需要尽量多针对以下屏幕宽高比测试自己的应用。

如果无法支持上述某些高宽比,可以使用 maxAspectRatio 以及 minAspectRatio 来指明自己应用可以处理的最高宽高比和最低宽高比,此属性需要在 AndroidManifest.xml 文件的 application 或者 activity 标签中添加。例如:
<application
android:maxAspectRatio="2.4">
<activity
android:maxAspectRatio="2.4" />
</application>
详细信息请参阅Android开发者指南
3.2 适配调试命令
在对三方应用折叠屏连续性支持情况测试的过程中,我们发现部分应用虽自行处置了配置变更,在AndroidManifest.xml中配置了screenSize|smallestScreenSize|screenLayout等configChanges属性,并回调onConfigurationChanged方法对屏幕做了适配,Activity不会重建,也不会重走生命周期。但应用的Activity仍然存在很多控件显示问题。
为了带给用户良好的使用体验,我们在系统中忽略了这部分app的configChanges属性配置,强制让应用的Activity执行重建,并重走生命周期,以达到界面完美显示的效果,我们将这种行为称为relaunch。
为了方便您在我们的设备上进行适配,我们提供了如下命令帮助您屏蔽上述的relaunch行为。屏蔽relaunch行为,是我们在经过充分测试评估后,认为您的应用即使执行relaunch,也无法达到连续性适配测试标准,甚至因relaunch重走生命周期,导致折叠展开后亮屏变慢、回到桌面、闪退、ANR等问题,因此屏蔽relaunch行为,旨在屏蔽上述亮屏变慢、回到桌面、闪退、ANR等一系列连续性、稳定性问题。
如果您希望通过relaunch重建Activity生命周期来适配折叠屏连续性,您需要关注上述的连续性、稳定性问题,避免在重建Activity生命周期中执行耗时操作,影响折叠展开时的应用性能、亮屏速率等,并避免在onDestroy里调用finish,以免折叠展开后回到桌面。
通过如下命令,您的应用在没有配置screenSize|smallestScreenSize|screenLayout等configChanges属性的情况下,折叠展开操作时仍能正常回调onConfigurationChanged方法,Activity不会重建,生命周期不会重走,但与此同时,在折叠屏折叠展开操作时可能会有通知提醒您应用显示存在异常,需要重启。您无需理会上述系统通知,它不会对您的适配造成任何影响。
adb shell wm dump -setForceDisplayCompatMode 应用包名 blocklist
通过如下命令,您的应用的这个activity在没有配置screenSize|smallestScreenSize|screenLayout等configChanges属性的情况下,折叠展开操作时仍能正常回调onConfigurationChanged方法,Activity不会重建,生命周期不会重走,但与此同时,在折叠屏折叠展开操作时可能会有通知提醒您应用显示存在异常,需要重启。您无需理会上述系统通知,它不会对您的适配造成任何影响。
adb shell wm dump -setForceDisplayCompatMode 应用包名/Activity组件全名 block example: adb shell wm dump -setForceDisplayCompatMode com.miui.mydemo/.ui.MainActivity block
如果您不想有弹出重启应用的通知,通过如下命令,您的应用的这个activity在没有配置screenSize|smallestScreenSize|screenLayout等configChanges属性的情况下,折叠展开操作时仍能正常回调onConfigurationChanged方法,Activity不会重建,生命周期不会重走,在折叠屏折叠展开操作时不会有通知提醒您应用显示存在异常,需要重启。
adb shell wm dump -setForceDisplayCompatMode 应用包名/Activity组件全名 notrelaunch example: adb shell wm dump -setForceDisplayCompatMode com.miui.mydemo/.ui.MainActivity notrelaunch
上述命令会导致您的应用无法执行relaunch重建,即使您的应用没有配置screenSize|smallestScreenSize|screenLayout等configChanges属性,但您的应用仍能正常回调onConfigurationChanged方法。为了您的应用能自行处置screenSize|smallestScreenSize|screenLayout等configChanges属性,您可以直接使用下面的命令,该命令会将您的应用恢复到Android 原生的处置配置变更的流程,便于您进行适配工作。与此同时,该命令会帮助您屏蔽掉重启通知,以免对您的适配工作造成打扰。
adb shell wm dump -setForceDisplayCompatMode 应用包名 allowlist
如果您希望恢复应用的整个包的relaunch状态,可执行如下命令(尽管我们不建议您这么做,仍然希望您能通过configChanges进行适配工作):
adb shell wm dump -setForceDisplayCompatMode 应用包名 relaunchlist
如果您希望恢复只是应用的某个activity的relaunch状态,可执行如下命令(尽管我们不建议您这么做,仍然希望您能通过configChanges进行适配工作):
adb shell wm dump -setForceDisplayCompatMode 应用包名/Activity组件全名 relaunch
如果您希望外屏不支持启动activity,您可以执行如下命令,系统将在外屏启动目标activity时拦截启动并弹窗提示在内屏打开,该命令和配置下述的property到application效果相同,区别在于该命令不具有持久化效果:
adb shell wm dump -setForceDisplayCompatMode 应用包名/Activity组件全名 interceptlist
example:
adb shell wm dump -setForceDisplayCompatMode com.miui.mydemo interceptlist
adb shell wm dump -setForceDisplayCompatMode com.miui.mydemo/.ui.MainActivity interceptlist
如果您希望外屏支持启动activity,您可以执行如下命令,系统将允许在外屏启动目标activity,不会再拦截启动并弹窗,此时您需要通过声明property值为5支持外屏启动目标activity,并针对外屏尺寸做好适配工作。
执行该命令后,在内屏打开「设置-外屏-应用管理」,可以添加对应应用icon到外屏桌面
adb shell wm dump -setForceDisplayCompatMode 应用包名/Activity组件全名 allowstart
example:
adb shell wm dump -setForceDisplayCompatMode com.miui.mydemo allowstart
adb shell wm dump -setForceDisplayCompatMode com.miui.mydemo/.ui.MainActivity allowstart
注意:以上命令行为不会在设备中持久化保存,在设备重启后就会失效。如有需要,您可再次执行上述命令。此外,执行命令后,您需要将您的应用从最近任务移除后重新启动,来保证命令生效。
执行如下命令将app的上述命令策略清除,恢复原生逻辑。
adb shell wm dump -setForceDisplayCompatMode 应用包名/Activity组件全名 clear
example:
adb shell wm dump -setForceDisplayCompatMode com.miui.mydemo clear
adb shell wm dump -setForceDisplayCompatMode com.miui.mydemo/.ui.MainActivity clear
如您已完成应用连续性适配,可以联系我们,在测试您的应用达到连续性标准后,我们会通过云控的方式将您的应用从relaunch名单中移除,待您的设备收到云控更新后,您的应用将不会再执行relaunch行为。
4.系统区背景色适配
Flip设备的系统区背景色取自app的导航栏背景色。App有两种设置导航栏背景色的方式,为了方便描述以下简称为静态和动态。
- 静态方式
在项目的res/values/themes.xml文件中通过android:navigationBarColor属性指定导航栏背景色。
<resources xmlns:tools="http://schemas.android.com/tools"> <!-- Base application theme. --> <style name="Theme.ActivityLifeCycleTest" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> <!-- Primary brand color. --> <!-- Customize your theme here. --> <item name="android:navigationBarColor">@color/black</item> </style> </resources>
- 动态方式
在Activity的生命周期方法比如onCreate中调用setNavigationBarColor方法。
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); int color = Color.GRAY; getWindow().setNavigationBarColor(color); }
注意:动态方式优先级比静态方式高。
当app指定的导航栏颜色为透明(Color.TRANSPARENT是透明色,其值为0)时,为了避免摄像头区域漏出下面的壁纸层,MIUI系统会将透明色转化为其他颜色,具体来说在浅色模式下会转化为白色值,在深色模式下转化为黑色值。除非app页面色调与上述转化后颜色相近,否则应尽量避免用透明导航栏颜色。
四、进阶适配开发指南
1.不同页面展示不同范围的方法
1.1 全屏、贴边、贴边+缩放适配
在AndroidManifest中增加meta-data配置,可实现应用或Activity全屏/贴边显示。Application和Activity 层级均可支持,Activity优先级更高。
<meta-data
android:name="miui.supportFlipFullScreen"
android:value="0" />

1.2 DisplayCutout适配

1.3 DISPLAY_CUTOUT_MODE详解
修改DISPLAY_CUTOUT模式:
WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; getWindow().setAttributes(layoutParams);
LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS | https://developer.android.com/reference/android/view/WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS | 始终允许窗口延伸到DisplayCutout屏幕所有边缘的区域。 |
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT | https://developer.android.com/reference/android/view/WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT | 仅当窗口DisplayCutout完全包含在系统栏中或深度不超过 16 dp 时,才允许窗口扩展到该区域DisplayCutout ,但这取决于OEM选择。否则,窗口的布局不会与该DisplayCutout区域重叠。 |
LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER | https://developer.android.com/reference/android/view/WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER | 窗口决不允许与 DisplayCutout 区域重叠。 |
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES | https://developer.android.com/reference/android/view/WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES | 始终允许窗口延伸到DisplayCutout屏幕短边的区域。 窗口永远不会延伸到DisplayCutout屏幕长边上的区域,除非DisplayCutout深度不超过 16 dp,但这取决于OEM选择。 |

对于Flip设备而言(摄像头在左上位置),
Flip设备外屏size = 1208 * 1392
且DisplayCutout区域为左上角Rect(0, 0 - 398, 728),且代码配置中为@left,
所以X设备外屏的DisplayCutout区域位于长边,且深度远超过16dp,
所以SHORT_EDGES、NEVER、DEFAULT这3种mode均不会显示全屏。
外屏全屏也可以用过同时设置SHORT_EDGES 和 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR 使当前页面直接全屏显示
注意:外屏 SHORT_EDGES和 ALWAYS 等效
案列:
WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); layoutParams.layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
getWindow().setAttributes(layoutParams);
@Override protected void onResume() {
super.onResume();
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);
}
注释 :上述属性设置后需注意 应用自身业务是否设置了 android:fitsSystemWindows="true" 或者 动态设置 setFitsSystemWindows(true) 。
2.配置显示或隐藏系统小部件
在应用内配置显示或隐藏系统小部件有两种方式
方式一:Property设置(建议)
通过配置property能够实现应用或应用内页面是否显示摄像头区域的系统小部件
属性名 | miui.supportFlipWatchOverlayGroupView |
属性值 | 默认不配置则显示小部件(默认值为true) 如果配置为false则隐藏小部件 |
配置粒度 | 支持Application + Activity。Activity优先 |
代码示例一:整个应用所有页面都隐藏小部件:
<application
... >
<property android:name="miui.supportFlipWatchOverlayGroupView"
android:value="false"/>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
代码示例二:应用仅MainActivity隐藏小部件,其余页面显示小部件
<application
... >
<activity
android:name=".MainActivity"
android:exported="true">
<property android:name="miui.supportFlipWatchOverlayGroupView"
android:value="false"/>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
代码示例三:应用仅MainActivity显示小部件,其余页面隐藏小部件
<application
... >
<property android:name="miui.supportFlipWatchOverlayGroupView"
android:value="false"/>
<activity
android:name=".MainActivity"
android:exported="true">
<property android:name="miui.supportFlipWatchOverlayGroupView"
android:value="true"/>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
方式二:Provider调用(不建议,适用于单Activity模式应用)
通过Provider接口全局设置本应用所有页面是否显示表盘。
注意:调用此方法后应用进程被杀,之前的效果依然会生效。需要应用自行考虑进程被杀的场景,做好兜底方案。
全局定义:设置一次后本应用所有页面都显示/隐藏(无论应用设置的是全屏还是贴边),后续设置可覆盖
设置有效期:手机重启 or 外屏桌面重启
调用示例:
// false:隐藏 true:显示
getContentResolver().call("com.miui.fliphome", "showFlipWatch", "false", null);
3.配置外屏桌面启动特殊页面
若三方应用在外屏仅支持打开特定页面,外屏桌面会有一套类似白名单的逻辑,白名单内的应用会优先启动特定页面。若无法启动,会启动默认启动页。特定Activity配置如下
当前预制条件:需要添加白名单

需要在第二入口 的Activity 配置 Action 为 "miui.fliphome.default"
<intent-filter> <!-- 通过 自定义 Action 启动 --> <action android:name="miui.fliphome.default" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>
开启第二入口的 Activity 配置 miui.supportFlipFullScreen resizeableActivity, 确保可以在外屏打开
android:resizeableActivity="true"
<meta-data android:name="miui.supportFlipFullScreen" android:value="1" />
当白名单应用未配置Action 为 "miui.fliphome.default" , 启动相应页面失败时,会启动应用默认的页面。
五、联系我们
邮箱:se-developer@xiaomi.com