竖折手机(Flip)适配说明更新时间: 2025-02-28 09:31:00

一、概述

1.小米Flip设备介绍

折叠屏是一种柔性屏,可以进行弯曲、折叠,比如上下折叠,左右折叠等。Xiaomi MIX Flip 为上下折叠设备,设备形态如下:

  • 展开态:设备完全展开后的形态,屏幕尺寸与直屏手机类似,使用体验与普通直屏手机相同。
  • 折叠态:设备折起后的形态,屏幕尺寸较小。外屏屏幕在背板上半部分,除摄像头区域外均为可显示区域。
  • 半折态:又称悬停态,屏幕未完全展开的形态,可以如支架一样悬停平稳放置,显示内容。

内外屏屏幕尺寸与分辨率参数如下:

机型外屏内屏
尺寸分辨率尺寸分辨率
Xiaomi MIX Flip4.01英寸1392 x 12086.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
booleanisFoldDeviceInside()
返回是否是横向内折设备(FOLD)。形态如Xiaomi MIX Fold 2, Xiaomi MIX Fold 3
booleanisFoldDeviceOutside()
返回是否是横向外折设备。
booleanisFoldDevice()
返回是否是横向折叠设备。包含所有横向折叠设备类型,如横向内折,横向外折
booleanisRearDevice()
返回是否是存在背屏的设备。形态如Xiaomi 11 Ultra
booleanisFlipDevice()
返回是否是竖向折叠设备(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_ALWAYShttps://developer.android.com/reference/android/view/WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS始终允许窗口延伸到DisplayCutout屏幕所有边缘的区域。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULThttps://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_NEVERhttps://developer.android.com/reference/android/view/WindowManager.LayoutParams#LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER窗口决不允许与 DisplayCutout 区域重叠。
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGEShttps://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_EDGESALWAYS 等效
案列:

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

文档内容是否有帮助?
有帮助
无帮助