4月30日,日前,vivo首款折叠屏手机正式公布。为了让开发者更好的适应新机型,vivo团队推出了新的适配指南。
vivo的折叠屏有展开状态和折叠状态,这两种状态下屏幕的分辨率是不同的。所以折叠屏状态切换时,分辨率也要动态切换。
如果App或activity不支持自动适配不同分辨率的屏幕,会出现一些显示不正常的问题,比如屏幕左右或下半部分黑边的问题如下图所示:
展开状态▼
折叠状态▼
适应建议
#01
使应用程序大小可调
为了提升用户体验,当折叠屏幕在展开状态和折叠状态之间动态切换时,应用程序界面不允许左右黑边或屏幕下半部分黑边(即应用程序进入兼容模式),因此应用程序需要支持不同分辨率下的可调页面大小。
该函数由android:resizeableactivity属性控制,可以在应用的AndroidManifest.xml中为App或activity设置。
lt gt ltp = " " gt lt gt
Android:resizeableActivity = " true " gt;
lt gt ltp = " " gt lt gt
Android:resizeableActivity = " true "/ gt;
注意:
1.当applied targetsdkversion >: =24时,android系统默认设置Android:Resizable Activity = " true ",无需应用声明即可调整应用大小。当应用的目标版本
2.当Application Android:resizable activity = " true "时,将对app的所有活动生效。因此,当应用程序只需要声明一个单独的活动时,只能为单个活动设置。
系统建议:为应用设置Android:resizable activity = " true ",避免折叠屏状态改变后应用部分页面出现黑边的问题。
其他适配事宜请参考Android开发者适配指南(比如链接中提到的保存界面状态和支持配置更改):
https://developer.android.com/guide/topics/ui/foldables? HL = zh-cn
3.设置Android:Resizable Activity = " true "后,应用可以进入分屏模式。如果不想进入分屏模式(进入分屏模式后会有一些适配问题)并且不会被视为兼容模式,可以在活动中添加以下代码:
Android:name = " Android . supports _ size _ changes " Android:value = " true "/ gt;
#02
不同分辨率的布局调整
折叠屏涉及不同的分辨率尺寸和DPI。应用界面不仅要保证分辨率切换时没有黑边,还要保证应用界面在不同分辨率下显示时没有明显的拉伸、错位、重叠等问题。所以需要优化布局,提供相应的位图进行适配。
详细的适配方法请参考以下链接:
https://developer . Android . com/training/multi screen/screen size?hl=zh-cn
#03
适应大屏幕体验
大屏适配时,显示的部分页面只是放大,没有利用大屏的空空间来显示更多的内容。
所以开发者需要有效利用大屏空调整布局,展示更多内容。
要解决这种显示问题,开发者可以在Android manifest . XML Android:config changes中声明“screenSize”的变化,然后在onConfigurationChanged中动态调整布局。
详细的适配方法请参考以下链接:
https://developer . Android . com/guide/topics/resources/runtime-changes?hl=zh-cn
#04
一种判断折叠屏的方法
运行时判断:
android.util.FtDeviceInfo
公共静态字符串getDeviceType
返回三种类型:手机、平板和可折叠。
开发者可以通过反射得到设备类型,返回值foldable表示折叠屏设备。
反射代码示例:
私有静态布尔值isvifoldabledevice(){
尝试{
class c = class . forname(" Android . util . ftdeviceinfo ");
方法m = c . get method(" get device type ");
object dType = m . invoke(c);
Log.d("fold "," get device type = "+dType);
返回“可折叠”。equals(dType);
} catch(异常e) {
e . printstacktrace();
}
返回false
}
#05
模型配置
如果应用已经适配其他厂商的折叠屏设备,可以根据型号名称配置新的折叠屏设备,可以直接配置vivo折叠屏型号V2178A。
调试和验证
#01
手机调试
设置:adb外壳wm密度480
展开状态:亚行外壳wm尺寸1916x2160
折叠状态:adb外壳wm大小1080x2520
注意:
1.折叠屏幕在展开状态和折叠状态下的DPI都是480,只需要设置一次。
2.当打开状态和折叠状态被切换时,可以通过设置不同的分辨率来执行模拟切换。
3.检查手机当前DPI和尺寸的方法:adb外壳wm密度和adb外壳wm尺寸
4.设置好DPI和分辨率后,重启手机的设置不会改变。如果需要回调手机默认值,可以通过adb shell wm大小重置和adb shell wm密度重置来恢复。
5.因为Android模拟器的调试效率,建议用手机模拟调试验证;如果有必要100%还原真机的物理尺寸,可以考虑模拟器。
#02
模拟器调试
除了通过动态切换手机分辨率进行调试,还可以通过模拟器进行调试验证。Android Studio模拟器手机类支持8寸和7.3寸折叠屏调试,但不能克隆(即模拟器物理尺寸和分辨率不能修改)。
如果模拟器系统映像是x86系统,则仅支持32位应用程序的安装和运行。如果是纯64位应用,模拟器需要选择arm64-v8a,否则无法安装运行应用。
注意:
1.Android Studio可折叠模拟器无法修改物理尺寸、分辨率和DPI,因此在适配时无法完全模拟一台vivo折叠屏手机。当App或activity resizable activity = true时,可以在Android原生模拟器中检查效果,以便验证剪切屏幕中是否有黑边。
2.64位模拟器需要PC主机支持,部分PC无法正常启动64位模拟器。
#03
折叠和展开模拟器
Android折叠屏模拟器无法修改物理尺寸、分辨率和DPI。如果应用在2.2布局适配中需要100%模拟折叠屏展开屏进行不同分辨率的调试,可以克隆按平板分类的Nexus 10,然后修改vivo折叠屏手机的物理尺寸、分辨率、DPI进行调试验证。
注意:
1.当UI兼容性匹配与物理尺寸强相关时,请务必将屏幕尺寸改为8.03,分辨率为扩展分辨率。
2.需要确认64位模拟器能否运行,这需要PC主机支持。
3.如果手机的DPI模拟和分辨率调试没有问题,在模拟器上运行不了,可以承包给vivo的界面人,抽查在vivo折叠屏的真机上运行。
4.模拟器无法修改DPI。启动模拟器后,需要通过adb shell命令进行设置。
此时打开终端,可以看到模拟器设备已经挂载连接,可以进行adb操作。
lambdaadb设备
连接的设备列表
仿真器-5554设备
模拟器不能直接修改DPI,需要在启动模拟器后单独设置。
亚行壳牌wm密度480