是时候适配一波Android11了,为后面项目适配铺平道路。 介绍 2020年6月11日,Google正式推送了Android 11 Beta版本,同年年9月9日正式发布。 开始适配Android 11。 隐私变更 强制执行分区存储机制 为了避免存储空间的读写权限被滥用,手机中存在着大量不明文件,且应用卸载后也没有删除掉。 android:requestLegacyExternalStorage="true" 但是这个适配方法在Android 11中已经失效,必须按照存储机制来乖乖适配,不一样的是Android 11允许使用 如何适配呢?在之前接入微信支付的时候,文档就有提示Android 11 第三方应用无法拉起应用适配,适配方案为在主工程的AndroidManifest.xml 中增加 <queries> 标签。 好在用户授予权限之后,虽然app会被杀死,但是安装页面依然会弹出。 电话号码 应用在读取电话号码时,使用 READ_PHONE_STATE 权限。
一、什么是移动端适配 移动端 Web 页面,就是常说的手机 h5页面、webview页面、公众号开发的网页等。 由于手机机型较多,各个手机的屏幕尺寸不一样,所以做移动端页面,需要考虑在安卓和ios的各种尺寸设备的兼容问题,我们要做的 web 页面适配,就是为了在不同设备上,页面能够保持统一展示效果,或等比缩放。 二、移动适配方案 常见的移动适配方案有以下几种: viewport 盒模型 flex rem 2.1、viewport - 可视区 最初手机端需要照顾 PC 端,如果不设置 viewport,直接访问网页的时候 ,我们发现网页内容看着很小,这是因为页面按照PC端最小宽度980展示的,也就是我们的网页宽度就是980,而手机屏幕宽度通常375、411、320、414等,没有980那么大,所以页面被缩小了很多。 ,是一个数字,可以是小数 maximum-sacle - 设置页面最大缩放值,是一个数字,可以是小数 user-scalable - 是否允许用户进行缩放,值为'yes'或者'no',yes表示可缩放,
一、什么是移动端适配 移动端 Web 页面,就是常说的手机 h5页面、webview页面、公众号开发的网页等。 由于手机机型较多,各个手机的屏幕尺寸不一样,所以做移动端页面,需要考虑在安卓和ios的各种尺寸设备的兼容问题,我们要做的 web 页面适配,就是为了在不同设备上,页面能够保持统一展示效果,或等比缩放。 二、移动适配方案 常见的移动适配方案有以下几种: viewport 盒模型 flex rem 2.1、viewport - 可视区 最初手机端需要照顾 PC 端,如果不设置 viewport,直接访问网页的时候 ,我们发现网页内容看着很小,这是因为页面按照PC端最小宽度980展示的,也就是我们的网页宽度就是980,而手机屏幕宽度通常375、411、320、414等,没有980那么大,所以页面被缩小了很多。 ,是一个数字,可以是小数 maximum-sacle - 设置页面最大缩放值,是一个数字,可以是小数 user-scalable - 是否允许用户进行缩放,值为'yes'或者'no',yes表示可缩放,
一、什么是移动端适配 移动端 Web 页面,就是常说的手机 h5页面、webview页面、公众号开发的网页等。 由于手机机型较多,各个手机的屏幕尺寸不一样,所以做移动端页面,需要考虑在安卓和ios的各种尺寸设备的兼容问题,我们要做的 web 页面适配,就是为了在不同设备上,页面能够保持统一展示效果,或等比缩放。 二、移动适配方案 常见的移动适配方案有以下几种: viewport 盒模型 flex rem 2.1、viewport - 可视区 最初手机端需要照顾 PC 端,如果不设置 viewport,直接访问网页的时候 ,我们发现网页内容看着很小,这是因为页面按照PC端最小宽度980展示的,也就是我们的网页宽度就是980,而手机屏幕宽度通常375、411、320、414等,没有980那么大,所以页面被缩小了很多。 ,是一个数字,可以是小数 maximum-sacle - 设置页面最大缩放值,是一个数字,可以是小数 user-scalable - 是否允许用户进行缩放,值为'yes'或者'no',yes表示可缩放,
initial-scale:初始缩放比例,也即是当页面第一次 load 的时候缩放比例。 maximum-scale:允许用户缩放到的最大比例。 user-scalable:用户是否可以手动缩放。
IPhone X: 375 x 812 不上不下的 IPad: 768 x 1024 5、分析 我们以宽度 1024 及以下算作移动端,以上算作 PC 端,所以两种选择 移动端适配一个移动端页面 ,PC 端适配一个 PC 端页面。 设计之初就想好一个页面适配两端,当然这个设计稿需要比较符合适配两端的条件。 6、别人适配是怎么做的? 7、自身情况及实现 我们是分两个页面做的,先看一下 PC 端设计稿 ? 结合动画的展现形式,其实并不是很理想做响应式,但还是要适配。 看看效果(当然这个是最终效果,只改变宽度的拉伸适配在最后会说): 8、特殊场景 这里就是刚刚说到的 分辨率超大,然后高度居很高,只把宽度缩很小的情况,因为设计稿是长宽比例为横向矩形,所以明显与用长宽比为竖向的矩形来看页面是背道而驰的
页面结构一个整页的静态背景图,一个头部标题图,中间六边形图,和下面会动的光圈(代码实现的旋转效果),六边形左右是四个树形图初版实现方式页面的头部很简单,背景图和标题水平居中,两个条件区域使用绝对定位靠左靠右分别处理根据 实现整体在屏幕中的位置相对合适基于六边形图的位置,把左右四个树形图定位上去最后把文字基于图片位置定位写上去就行了遇到的问题,解决方案位置异常刚开始做完以后在PC屏幕上看着正常,在浏览器 tab 页签下看的效果,由于是大屏项目,使用F11 在实际测试中发现另外一个问题,在当前页面设置对应的比例后,在其他页面也会默认使用对应的比例,如果其他页面的内容没那么多,默认百分百比例就行的话,这样效果就不好了,为解决这种情况,在 beforeDestroy () 中把页面比例再调整成百分百,并且移除 resize 监听事件 beforeDestroy() { function handleResize() {} window.removeEventListener 也添加了缩放效果,笔记本中左侧数据依然显示不完整产品设计问题,由于左上角的内容显示太多了,显示不全,把 元/头 和 母猪 这两部分可省略的字都去掉就行了,找产品,跟Ta说一下,把能省略的字去掉写在最后大屏项目的各种适配问题
有时候我们需要针对不同的访问方式指定不同的页面或者URL。 如仅是几个静态页面进行切换,那么可以用js进行判断跳转,如: 例子 有两个页面,分别是 index.html、index_m.html; index.html(假定电脑端) 添加如下 JavaScript
起源 在targetSdkVersion为30的情况下,在Android 11的小米10手机上运行,调用ToastUtil的时候闪退报错: null cannot be cast to non-null type android.widget.LinearLayout 且看已知条件: targetSdkVersion 30 Android 11 小米10 文末附Android 11适配手册 定位问题 view as LinearLayout 现在看来其实是没有错的,事实上运行在Android11以下也确实没问题。 适配方案 综上所诉,适配方案也了然于心了。 Android 11开发手册 《Android 11 开发者手册》
背景 最近在项目中着手做Android10和Android11 适配时候,期间遇到了不少的坑。之前有专门写过qq、微信分享的适配。但是此次在针对偏业务侧适配工作的时候还是碰到了一些新的问题。 但是,这里有个坑: 在Android10上不行,在Android11上又可以!!为什么? 因为Google改回来了,让Android11支持file://格式了。。。。 (wtf? 三、终极适配方案 在Android10上 开启标志位 :android:requestLegacyExternalStorage="true"来开启兼容模式,关闭分区适配,相当于targetSdkVersion 在Android11上 以上标志会自动失效。因此,应用存储的东西还在放在App-specific目录下。分享私有目录可以通过fileprovider 方式适配。 答: 如果按照上面正常适配,肯定完全没得问题!
Android 11 应用兼容性适配指导 本文档基于谷歌Android 11 Developer Preview 4(DP4)版本的变更输出,后续Beta版如有新的变更和特性,我们会刷新文档的相关章节内容 如果您需要对已安装的应用进行适配分区存储的数据迁移,则可以在应用更新到目标平台为Android 11版本后仍暂时保留原有的存储模式。 ● 使用 ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION intent 操作将用户引导至一个系统设置页面,在该页面上,用户可以为您的应用启用以下选项:授予所有文件的管理权限 ■ 使用 ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION intent 操作将用户引导至一个系统设置页面,在该页面上,用户可以为您的应用启用以下选项:授予所有文件的管理权限 3 适配指导 (1)Target Android 11 使用自定义的UI界面向用户展示申请ACCESS_BACKGROUND_LOCATION权限原因和过程。
50px,例如 html{ font-size: 10px; } p{ width: 2rem; /* 2*10 = 20px;*/ margin: 1rem; } rem来做适配 以前我们往往这样做页面:viewport width 设置为 device-width,然后选我们需要兼容设备的最小宽度(一般是320px)。 根据这最小宽度来做页面。单位使用px和百分比。在宽度不同的设备上,页面的字体大小,内容尺寸都是一样的,不同的是,大屏的内容间的空隙比小屏的大。 所以这样做的缺点就是,页面在某些尺寸的设备上显示的效果不好。 如果用rem来页面,我们会根据不同的设备宽度在根元素上设置不同的字体大小。宽度越宽,字体越大。然后对原本使用px的地方使用rem来替换。 为了能将设计稿中的 px 方便的转换为页面中 rem,我设置 1rem 为 宽度为 640px 的设计稿中的 100px。
随着这两年苹果坚定不移的走刘海屏路线,Hybrid 页面在 iPhoneX 上刘海屏的适配也是每个前端开发的小伙伴都会碰到的问题,今天就记录一下我关于刘海屏适配的部分经验。 safe-area.png 很明显,在讨论适配之前,我们的页面一般有两种分类: 1、H5 页面使用原生 App 的 Navigation Bar 导航栏,此时,status bar 状态栏和导航栏都是原生控件 页面适配 在为页面适配刘海屏之前,我们首先得在页面的 meta 中添加一个新的值:viewport-fit=cover <meta name="viewport" content="viewport-fit 看一页目前的<em>页面</em>效果: ? WX20200531-205514@2x.png 可以看到现在我们的测试<em>页面</em>已经铺满了整个屏幕。 这个时候,我们来使用之前提到的 env 函数,<em>适配</em>刘海屏幕。 当你的<em>页面</em>不使用原生导航栏铺在整个屏幕中时,这就是一个不错的<em>适配</em>方案。
: 注意:当您将应用更新为以 Android 11(API 级别 30)为目标平台后,如果应用在搭载 Android 11 的设备上运行,系统会忽略 requestLegacyExternalStorage 这段信息,简单可以理解为 requestLegacyExternalStorage=true 只能解燃眉之急,到了 Android 11 上,还是要做适配工作。 ,如果应用在 Android 11 的设备上运行,系统会忽略 requestLegacyExternalStorage属性,强制开启分区存储。 3、如果 App 中有通过 File Api 访问外部存储共有目录的代码,还是要需做适配的,至于怎么去做本文就不再讨论了 教训 绕了一圈之后,得出两个教训: 适配新版本的时候,最好先用真机测试一下,万一完美运行就不用适配了 认真读文档、认真读文档、认真读文档 Glide 加载缩略图 最后,说个与适配不太相干的话题,只想看适配内容的朋友可以先跳过了。
Android 11 (R) Android 11 (R) 在 Android 10 (Q) 中分区存储的基础上进行了调整。 1. 使用 ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION intent 操作将用户引导至一个系统设置页面,在该页面上,用户可以为您的应用启用以下选项:授予所有文件的管理权限 缺点当然是不强制启用的话,国内 APP 适配进度估计得延后了。不过好消息是在查资料的时候,看到了国内大厂的相关适配文章,至少说明大厂在跟进了。 关于适配的难度: 对绝对路径相关接口依赖比较深的 APP 适配还是改动挺多的;其次权限的划分很细,什么时候需要什么权限以及调用哪个接口,理解起来需要一定时间; MediaStore API SAF API 所以虽然明年才会强制执行分区存储,但还是建议尽早理解和 review 项目中需要适配的代码。
导语 本文主要是对iOS 11下APP中tableView内容下移20pt或下移64pt的问题适配的一个总结。 接下来排查下自己的项目中哪些页面会发生以上问题。 需要了解每个页面的结构,看tableView是否被系统的statusbar或navigationbar覆盖,如果被覆盖的话,则会发生下移。 五、遇到的另外一个与安全区域无关的tableView内容下移的问题 我的作品页面的tableView下移了约40pt,这里是否跟安全区域有关呢? 查了下页面结构,tableView的父视图的frame在navigationbar的bottom之下,tableView在父视图的安全区域内,打印出来tableView的SafeAreaInset值也是
作为第一个强制要求分区存储的 API 级别,Android 11无疑是近几年适配工作较为复杂的版本,各个 APP 的适配进度也被寄予期盼。 二、变更要点 2.1 包可见性 适配 Android 11 之前,APP可以获取到手机已安装的应用列表信息。 适配 Android 11 后,Mac 地址和 ICCID 的获取都受限了。 APP 无需权限就可以读写属于它的应用私有目录,这点在适配 Android 11前后都没有变化。 3.1 精确定位范围 部分业务较多的产线比较少直接操作存储或调用了需适配的 API,因此 Android 11 的适配理论上应该尽可能少地对他们产生影响。
| 导语 本文主要是对iOS 11下企鹅 FM APP中tableView内容下移20pt或下移64pt的问题适配的一个总结。 接下来排查下自己的项目中哪些页面会发生以上问题。 需要了解每个页面的结构,看tableView是否被系统的statusbar或navigationbar覆盖,如果被覆盖的话,则会发生下移。 五、遇到的另外一个与安全区域无关的tableView内容下移的问题 我的作品页面的tableView下移了约40pt,这里是否跟安全区域有关呢? ? 查了下页面结构,tableView的父视图的frame在navigationbar的bottom之下,tableView在父视图的安全区域内,打印出来tableView的SafeAreaInset值也是
本文将从分区存储、应用包可见性、权限变化和新功能四个方面来谈谈 Android 11 新特性,以帮助开发者更快速、更便捷地上手适配Android新系统。 我们可以通过使用 ACTIONMANAGEALLFILESACCESS_PERMISSION intent 操作将用户引导至一个系统设置页面,让用户为应用授予所有文件的管理权限。 我们可以在 AndroidMainfest 中添加 <queries>来适配特定的使用场景:(该配置相当于是添加应用白名单) 已知想获取的包名: image.png 2. 应用想要申请后台权限,除了需要在清单文件中额外添加 ACCESSBACKGROUNDLOCATION 权限外,还需要应用主动引导用户到指定页面授权。 为了提升SDK的稳定性、兼容性,个推也对Android 11 的新特性进行了深入研究,并即将针对旗下产品推出全新的适配方案,以满足开发者不同的使用场景。
一、单纯升级iOS11后造成的变化 1. 升级后,发现某个拥有tableView的界面错乱,组间距和contentInset错乱,因为iOS11中 UIViewController 的 automaticallyAdjustsScrollViewInsets 如果使用了Masonry 进行布局,就要适配safeArea ([UIDevice currentDevice].systemVersion.floatValue >= 11.0) { make.edges.equalTo (self.view.safeAreaInsets); } else { make.edges.equalTo(self.view); } iOS 11适配之跳转App Store评论 在iOS 11之前,为了让用户直接跳到App Store的评论页面,你的代码大概是这样写的: -(void)goToAppStore { NSString *itunesurl = @"http://itunes.apple.com