Android Q新特性,一起来学习折叠屏应该如何适配

android:resizeableActivity=“true”

相反,如果暂时不打算适配,把这个参数设为 false 就好了。需要说明的是,这个参数在 Android 7.0 或更高版本默认为 true,以下则默认为 false。

下面介绍两个和这个参数相关的概念。

/   分屏模式   /

之所以从 Android 7.0 开始,把 resizeableActivity 默认改为 true,是因为在 7.0 里增加了一个新功能,叫分屏模式。

如果把 resizeableActivity 设为 false,就意味着应用是不支持分屏模式的,它决定了应用是否有分屏的设置项。

/   兼容模式   /

当 resizeableActivity 取 false 时,展开折叠屏可能会变成这样的效果:

这个效果类似于在 iPad 上使用不兼容的 iPhone 应用,这个四周用黑色填充的模式,叫兼容模式。

兼容模式的显示和最大支持比例 maxAspectRatio 有关,当屏幕比例超过 maxAspectRatio 时才会用黑边填充,官方建议把  maxAspectRatio 设为 2.4 (12 : 5),修改 maxAspectRatio 的方法如下:

Android 8.0 或以上版本

在  标签中配置 android:maxAspectRatio:

<activity android:name=“.MainActivity”

android:maxAspectRatio=“2.4” />

Android 8.0 以下版本

在 标签中添加名为 android.max_aspect 的 meta-data:

如果 resizeableActivity 设为 true,就不需要设置 maxAspectRatio 了,设了也不会生效。

/   监听尺寸改变   /

在默认情况下,当屏幕发生了变化,系统会销毁并重新创建整个 Activity。但我们希望屏幕变化之后,程序能够以切换前的状态继续运行,不需要重启页面。

我们可以给 Activity 添加配置:

android:configChanges=“screenSize|smallestScreenSize|screenLayout”

这样配置后,当屏幕发生变化就不会重启 Activity 了,会调用到 onConfigurationChanged 方法,我们可以在这个方法里获取到当前的屏幕信息:

@Override

public void onConfigurationChanged(Configuration newConfig) {

super.onConfigurationChanged(newConfig);

Log.i(“config”, “newConfig.screenHeightDp:” + newConfig.screenHeightDp

  • “, newConfig.screenWidthDp” + newConfig.screenWidthDp);

}

这样改之后需要注意测试,看看页面的布局是否发生错乱,如果布局不合理就需要修改布局以适配不同分辨率。

我们也可以根据屏幕信息来更新布局,比如在大屏幕上把 LinearLayout 切换成 GridLayout,充分利用大屏幕的显示空间,这是更进一步的优化做法了:

image

/   Android Q   /

在即将到来的 Android Q 上,增加了一些支持折叠屏的特性。

Multi-resume

==========================================================================

对于分屏模式,过去的分屏只支持两个应用同时显示,而大屏幕带来了更多的可能性,现在已经允许两个以上的应用同时显示了。

在 Android Q 之前的版本,以分屏模式运行的应用里面,只有获取到焦点的 Activity 会处于 onResume 状态,其他可见 Activity 都是处于 onPause 状态。

而在 Android Q 上,所有顶层可见 Activity 都处于 onResume 状态,保证在分屏模式下的可见 Activity 都能正常运行。但能获取到焦点的 Activity 依然只有一个,我们把这个 Activity 叫做 TopResumedActivity。

在 Android Q 的 Activity 里增加了一个生命周期回调方法 onTopResumedActivityChanged(),它会在 Activity 获取或失去焦点时调用,可以用来判断当前 Activity 是否拥有焦点:

protected void onTopResumedActivityChanged(boolean topResumed) {

if (topResumed) {

// 获取到焦点

} else {

// 失去焦点

}

}

当我们使用了独占资源时就要用到这个方法。什么叫独占资源?麦克风、摄像头就是,这类资源同一时间只能给一个 Activity 使用。

比如分屏模式下的多个 Activity 都使用了摄像头,但这时候只有获取到焦点的 Activity 拥有访问权限,这种情况下就要通过 onTopResumedActivityChanged() 判断当前 Activity 是否获取到焦点。在失去焦点的时候可以不释放摄像头,但是需要处理好摄像头断开连接和重新连接的情况。

image

minAspectRatio

在 Android Q 之前只能配置最大支持比例 maxAspectRatio,现在 Android Q 可以配置最小支持比例 minAspectRatio 了, 用法和 maxAspectRatio 一样:

最大最小支持比例,都是在 resizeableActivity 取 false 的时候才会有用。

/   调试   /

最好的调试工具当然就是用真机了,但目前只有少部分人有这个条件,下面是真机以外的两个调试方案。

Android Studio

在 Android Studio 3.5 里增加了折叠屏设备的虚拟机,我们可以创建一个来调试:

通过点击模拟器上的按钮,我们可以切换虚拟机的折叠和展开状态:

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

总结

这次面试问的还是还是有难度的,要求当场写代码并且运行,也是很考察面试者写代码
因为Android知识体系比较庞大和复杂的,涉及到计算机知识领域的方方面面。在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img
d复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)
[外链图片转存中…(img-J9i6SmeZ-1712820829676)]
里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-cwu0j1bu-1712820829676)]

  • 29
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值