IT之家 4 月 30 日消息,前几天,vivo 首款折叠屏手机正式官宣,为让开发者更好地适配新机型,vivo 团队特推出了全新的适配指南。 vivo 折叠屏有展开态和折叠态,这两种状态下屏幕的分辨率是不同的。因此,在折叠屏状态切换时,分辨率也要动态切换。 如果 App 或 activity 不支持不同分辨率屏幕自动适配,则会存在一些显示异常的问题,例如下图所示的左右或下半屏存黑边问题: 展开态 ▼ 折叠态 ▼ 适配建议 #01 让应用大小可调 为了加强用户体验,折叠屏在展开态和折叠态动态切换时,应用界面不允许存在左右黑边或下半屏黑边的情况 (即应用进入兼容模式),因此需要应用支持不同分辨率情况下页面大小可调。 此功能由 android:resizeableActivity 属性控制,在应用的 AndroidManifest.xml 中可以针对 App 或 activity 进行设置。<application android:resizeableActivity="true"> <activity android:resizeableActivity="true"/> </application> Note: 1. 当应用的 targetSdkVersion >=24 时,android 系统默认设置 android:resizeableActivity="true",不需要应用声明即可支持应用大小可调。当应用的 targetSdkVersion < 24 时,需要应用针对 application 或 activity 设置 android:resizeableActivity="true"。 2. application android:resizeableActivity="true" 时,会针对 App 的所有 activity 生效,因此当应用只需要声明单独的 activity 时,可以只针对单个 activity 进行设置。 系统侧建议:针对 application 设置 android:resizeableActivity="true",避免应用部分页面在折叠屏状态变化后存在黑边问题。 其他适配事项可以参考 Android 开发者适配指导 (例如链接中提到的保存界面状态和支持配置变更部分): https://developer.android.com/guide/topics/ui/foldables?hl=zh-cn 3.设置 android:resizeableActivity="true" 后,应用即可进入分屏模式,若不想进入分屏模式(进入分屏模式后会有一些适配问题)又不被当做兼容模式,可以在 Activity 里加上如下代码:<meta-data android:name="android.supports_size_changes"android:value="true"/> #02 不同分辨率布局适配 折叠屏涉及到不同的分辨率尺寸和 DPI,应用界面除了要保证分辨率切换时无黑边问题外,还需要保证应用界面在不同分辨率显示时页面无明显的拉伸、错位和重叠等问题,因此需要优化布局和提供对应的位图来进行适配。 详细适配方法可参考以下链接: https://developer.android.com/training/multiscreen/screensizes?hl=zh-cn #03 适配大屏体验 在大屏适配时,部分显示页面仅仅只是放大,而没有利用大屏的空间展示更多内容。 因此,开发者们需要有效利用大屏空间调整布局展示,显示更多的内容。 要解决此类显示问题,开发者们可以在 AndroidManifest.xml android:configChanges 中声明 "screenSize" 变化,然后在 onConfigurationChanged 中动态调整布局。 详细适配方法可以参考以下链接: https://developer.android.com/guide/topics/resources/runtime-changes?hl=zh-cn #04 判定折叠屏方法 运行时判断: android.util.FtDeviceInfo public static String getDeviceType 返回的三种类型:phone、tablet 和 foldable 开发者可以通过反射的方式获取设备类型,返回值 foldable 表示折叠屏设备。 反射代码示例:privatestaticbooleanisVivoFoldableDevice(){ try{ Class<?>c=Class.forName("android.util.FtDeviceInfo"); Methodm=c.getMethod("getDeviceType"); ObjectdType=m.invoke(c); Log.d("fold","getDeviceType="+dType); return"foldable".equals(dType); }catch(Exceptione){ e.printStackTrace(); } returnfalse; } #05 机型配置 若应用已经针对其他厂家折叠屏设备进行了适配,新的折叠屏设备根据机型名配置即可生效,可直接配置 vivo 折叠屏 model 型号 V2178A。调试和验证 #01 手机调试 DPI 设置:adbshell wm density 480 展开态:adb shell wm size 1916x2160 折叠态:adb shell wm size 1080x2520 Note: 1. 折叠屏展开态和折叠态 DPI 一样都是 480,只需要设置一次 2. 展开态和折叠态进行切换时,可以通过设置不同的分辨率来进行模拟切换 3.查看手机当前 DPI 和 size 的方法:adb shell wm density 和 adb shell wm size 4. DPI 和分辨率设置后,重启手机设置不会发生变化,若需要调回手机默认值,可通过 adb shell wm size reset 和 adb shell wm density reset 进行恢复 5. 由于 Android 模拟器调试效率问题,推荐用手机模拟调试和验证;若需要 100% 还原真机物理尺寸,可考虑模拟器 #02 模拟器调试 除了通过手机动态切换分辨率的方式来进行调试外,还可通过模拟器进行调试和验证。Android Studio 模拟器 Phone 分类支持 8 英寸和 7.3 英寸的折叠屏调试,但是无法克隆(即无法修改模拟器的物理尺寸和分辨率)。 模拟器 System image 如果是 x86 的系统,则只支持 32 位应用的安装和运行;如果是纯 64 位的应用,模拟器需要选择 arm64-v8a,否则无法安装和运行应用。 Note: 1.Android Studio Foldable 模拟器无法修改物理尺寸、分辨率和 DPI,因此在适配时,无法完全模拟 vivo 折叠屏手机,在 App 或 activity resizeableActivity = true 时,为了验证切屏是否有黑边可以在 Android 原生模拟器查看效果。 2. 64 位模拟器需要 PC 主机支持,部分 PC 无法正常启动 64 位模拟器。 #03 折叠屏展开态模拟器 Android 折叠屏模拟器无法修改物理尺寸、分辨率和 DPI。若应用在进行《2.2 不同分辨率布局适配》时需要 100% 模拟折叠屏展开态的屏幕进行调试,可以通过克隆 Tablet 分类的 Nexus 10,然后修改 vivo 折叠屏手机对应的物理尺寸、分辨率和 DPI 进行调试和验证。 Note: 1. 应用 UI 兼容性适配对物理尺寸有强关联时,请务必修改 Screen size 为 8.03,分辨率是展开态分辨率 2. 需确认 64 位模拟器是否可以运行需要 PC 主机支持 3. 若手机模拟 DPI 和分辨率调试无问题后,无法在模拟器运行,可以发包给 vivo 接口人,在 vivo 折叠屏真机运行点检 4. 模拟器无法修改 DPI,需要启动模拟器后,通过 adb shell 命令设置 此时打开终端,可以看到模拟器设备已经挂载和连接,可以进行 adb 操作。λadbdevices Listofdevicesattached emulator-5554device 模拟器无法直接修改 DPI,需要启动模拟器后单独设置。adbshellwmdensity480