2020-11-04 10:24发布
刘海屏也叫水滴屏,指的是手机屏幕正上方由于追求极致边框而采用的一种手机解决方案。
测试时重点关注全屏显示时刘海区域是否会遮挡住页面上的控件或者背景。
毫无疑问,当夏普发布全球首款“异形全面屏”手机——AQUOS S2时,是被开发者甚至用户所唾弃的。但是苹果刘海屏iPhone X的到来,让人们慢慢接受了这一妥协的设计方案。直到今天,大批Android手机厂商的跟进,把整个移动开发行业都带进了刘海屏的深坑。相对于苹果单一的设备/系统,适配刘海屏还是比较容易的。然而,在目前的Android生态下,不同的厂商,不同的定制系统,有着不同的刘海面积......
目前就国内的手机厂商来说,已经推出刘海屏的厂商有华为、OPPO、VIVO,传言小米也即将推出刘海屏手机。基本上国内五大厂商都推出了自己的刘海屏手机(另一个是苹果),还有其他如LG,一加等等的刘海屏手机也在路上了。2018年的今天,刘海屏的应用适配已经不容忽视了。
关于全面屏即18:9非异形屏幕适配方案可以参考笔者之前的文章:
Android手机 全面屏(18:9屏幕)适配指南 。
在推出自家的刘海屏收集后,大部分厂商也在开发者平台中更新了适配的文档:
VIVO异形屏适配指南
OPPO凹型屏适配说明
小米MIUI Notch 屏适配说明
其中大都提到了屏幕安全区的概念,以及判断是否为刘海屏手机的方法,具体细节可以参考官方文档。由于目前Android P仍未发布,Android生态中尚未官方支持刘海屏,所以各家的方案实现都有不同,这也给我们开发者带来了额外的适配成本。
根据VIVO、OPPO、华为官方文档,这里整理了一个刘海屏工具类,判断设备是否为刘海屏,其他厂商公布相关方法后也会在此更新。
OPPO(已验证):
/** * OPPO * * @param context Context * @return hasNotch */ public static boolean hasNotchInOppo(Context context) { return context.getPackageManager().hasSystemFeature("com.oppo.feature.screen.heteromorphism"); }
VIVO(已验证): 新测试机到了,马上验证了一下,此外也感谢评论区
@赵树超
/** * VIVO * * android.util.FtFeature * public static boolean isFeatureSupport(int mask); * * 参数: * 0x00000020表示是否有凹槽; * 0x00000008表示是否有圆角。 * * @param context Context * @return hasNotch */ private static boolean hasNotchInVivo(Context context) { boolean hasNotch = false; try { ClassLoader cl = context.getClassLoader(); Class ftFeature = cl.loadClass("android.util.FtFeature"); Method[] methods = ftFeature.getDeclaredMethods(); if (methods != null) { for (int i = 0; i < methods.length; i++) { Method method = methods[i]; if (method.getName().equalsIgnoreCase("isFeatureSupport")) { hasNotch = (boolean) method.invoke(ftFeature, 0x00000020); break; } } } } catch (Exception e) { e.printStackTrace(); hasNotch = false; } return hasNotch;}
* android.util.FtFeature * public static boolean isFeatureSupport(int mask); *
* 参数: * 0x00000020表示是否有凹槽; * 0x00000008表示是否有圆角。 * * @param context Context * @return hasNotch */ private static boolean hasNotchInVivo(Context context) { boolean hasNotch = false; try { ClassLoader cl = context.getClassLoader(); Class ftFeature = cl.loadClass("android.util.FtFeature"); Method[] methods = ftFeature.getDeclaredMethods(); if (methods != null) { for (int i = 0; i < methods.length; i++) { Method method = methods[i]; if (method.getName().equalsIgnoreCase("isFeatureSupport")) { hasNotch = (boolean) method.invoke(ftFeature, 0x00000020); break; } } } } catch (Exception e) { e.printStackTrace(); hasNotch = false; } return hasNotch;}
华为(已验证):
/** * HUAWEI * com.huawei.android.util.HwNotchSizeUtil * public static boolean hasNotchInScreen() * * @param context Context * @return hasNotch */ public static boolean hasNotchInHuawei(Context context) { boolean hasNotch = false; try { ClassLoader cl = context.getClassLoader(); Class HwNotchSizeUtil = cl.loadClass("com.huawei.android.util.HwNotchSizeUtil"); Method get = HwNotchSizeUtil.getMethod("hasNotchInScreen"); hasNotch = (boolean) get.invoke(HwNotchSizeUtil); } catch (Exception e) { e.printStackTrace(); } return hasNotch; }
除了OPPO的判断简单点外,其他两家厂商都是用反射来获取刘海屏幕信息的。除了VIVO外,另外两家设备都测试过了,有相关设备的开发者可以自行测试一下,欢迎评论私信反馈。
最后,不得不感叹苹果的号召力。跟风也好,抄袭也罢,最为开发者,吐槽之后,还是得做好应用适配。
.header { position: relative; height: 44px; background-color: #06091C; color: #fff; } .header .left { position: absolute; width: 44px; height: 44px; left: 0; bottom: 0; background-image: url('../../image/strategy/back.png'); background-repeat: no-repeat; background-size: 20px 20px; background-position: 8px center; } .header .center { position: absolute; width: 60%; height: 44px; left: 20%; bottom: 0; font-size: 20px; } .header .right { position: absolute; height: 44px; right: 0; bottom: 0; font-size: 14px; padding: 0 12px; } 发微博 发布 apiready = function() { fixStatusBar();}//修复沉浸式头部高度function fixStatusBar() { var el = document.querySelector('header'); if (!el) { return; } el.style.paddingTop = api.safeArea.top + 'px'; window.headerHeight = el.offsetHeight; // 获取header高度}
、 黑盒测试:是一种常用的软件测试方法,它将被测软件看作一个打不开的黑盒,主要根据功能需求设计测试用例,进行测试。几种常用的黑盒测试方法和黑盒测试工具有,等价类划分法、边界值分析法、因果图法、决策表法。在实际运用中要选择合适的方法。二、 因果...
果图法是一种适合于描述对于多种输入条件组合的测试方法,根据输入条件的组合、约束关系和输出条件的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件涉及的各种组合情况。因果图法一般和判定表结合使用,通过映射同...
判定表(Decision Table)是分析和表达多逻辑条件下执行不同操作的情况下的工具.在程序设计发展的初期,判定表就已被当作编写程序的辅助工具了.由于它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确....
判定表通常有以下四个部分组成:1)条件桩(Condition Stub):列出了问题的所有条件。通常认为列出的条件的次序无关紧要。2)动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。3)条件项(Condition Entry):列出针对它左列...
长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是...
1) 边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。2) 边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。
边界值分析方法是对等价类划分方法的补充. 长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.使用边界值分析方法设计测试用例...
在编程中,布尔量指一个真或假状态。通常它们分别用0,1或1,-1来表示,这和编程语言有关。具体来说当布尔量为真的时候表示一个表达式或判断成立,否则这个式子或判断不成立。你把它理解为成立或不成立就行了。...
1)输入条件规定取值范围,则卡定义一个有效等价类和两个无效等价类。例如学生成绩范围是0~100,则一个有效类:0
1,先确定等价类别2,找出有效等价类和无效等价类3,边界值找好,尽可能多的找的会有重复的数据4,有效等价类尽可能条件符合的归一起不要重复5,无效等价类单独写开6,写好测试用例7,执行测试用例...
应用场景:只要有数据输入的地方就可以采用等价类划分法。按照需求,把无穷多的数据进行分类,从中挑选出代表性数据进行测试。具体操作:(1)明确测试对象(测试什么)(2)划分等价类(按照需求分有效、无效)(3)细化等价类(有效、无效进行细化)(4)建...
采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。
Priority()和Severity(严重程度)是的两个重要属性。很多新人经常混淆这两个概念。通常,人员在提交Bug时,只定义Bug的Severity, 即该Bug的严重程度,而将Priority交给Project Leader 或Team Leader来定义,由他们来决定该Bug被修复的优先等级。某种意义上来说...
1致命:致命是指系统主要功能丧失,用户数据受到破坏,造成系统崩溃、悬挂、死机或者危及人身安全等的问题。例如程序所引起的死机,非法退出、死循环、数据库发生死锁、数据流环节上严重的数值计算错误、产品设计存在严重的安全问题、漏洞被利用后可能导致系统...
1、New:(新的)当某个bug被发现的时候(第一次),测试人员需要与项目负责人沟通以确认发现的的确是一个bug,如果被确认是一个bug,就将其记录下来,并将bug的状态设为New。2、Assigned(已指派的)当一个bug被指认为New之后,将其将给开发人员,开发人员将...
软件缺陷是计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。IEEE729-1983对缺陷有一个标准的定义:从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病等...
最多设置5个标签!
刘海屏也叫水滴屏,指的是手机屏幕正上方由于追求极致边框而采用的一种手机解决方案。
测试时重点关注全屏显示时刘海区域是否会遮挡住页面上的控件或者背景。
前言
毫无疑问,当夏普发布全球首款“异形全面屏”手机——AQUOS S2时,是被开发者甚至用户所唾弃的。但是苹果刘海屏iPhone X的到来,让人们慢慢接受了这一妥协的设计方案。直到今天,大批Android手机厂商的跟进,把整个移动开发行业都带进了刘海屏的深坑。
相对于苹果单一的设备/系统,适配刘海屏还是比较容易的。然而,在目前的Android生态下,不同的厂商,不同的定制系统,有着不同的刘海面积......
现状
目前就国内的手机厂商来说,已经推出刘海屏的厂商有华为、OPPO、VIVO,传言小米也即将推出刘海屏手机。基本上国内五大厂商都推出了自己的刘海屏手机(另一个是苹果),还有其他如LG,一加等等的刘海屏手机也在路上了。2018年的今天,刘海屏的应用适配已经不容忽视了。
适配
关于全面屏即18:9非异形屏幕适配方案可以参考笔者之前的文章:
Android手机 全面屏(18:9屏幕)适配指南 。
在推出自家的刘海屏收集后,大部分厂商也在开发者平台中更新了适配的文档:
VIVO异形屏适配指南
OPPO凹型屏适配说明
小米MIUI Notch 屏适配说明
其中大都提到了屏幕安全区的概念,以及判断是否为刘海屏手机的方法,具体细节可以参考官方文档。由于目前Android P仍未发布,Android生态中尚未官方支持刘海屏,所以各家的方案实现都有不同,这也给我们开发者带来了额外的适配成本。
工具类
根据VIVO、OPPO、华为官方文档,这里整理了一个刘海屏工具类,判断设备是否为刘海屏,其他厂商公布相关方法后也会在此更新。
OPPO(已验证):
VIVO(已验证): 新测试机到了,马上验证了一下,此外也感谢评论区
@赵树超
华为(已验证):
除了OPPO的判断简单点外,其他两家厂商都是用反射来获取刘海屏幕信息的。除了VIVO外,另外两家设备都测试过了,有相关设备的开发者可以自行测试一下,欢迎评论私信反馈。
结语
最后,不得不感叹苹果的号召力。跟风也好,抄袭也罢,最为开发者,吐槽之后,还是得做好应用适配。
.header {
position: relative;
height: 44px;
background-color: #06091C;
color: #fff;
}
.header .left {
position: absolute;
width: 44px;
height: 44px;
left: 0;
bottom: 0;
background-image: url('../../image/strategy/back.png');
background-repeat: no-repeat;
background-size: 20px 20px;
background-position: 8px center;
}
.header .center {
position: absolute;
width: 60%;
height: 44px;
left: 20%;
bottom: 0;
font-size: 20px;
}
.header .right {
position: absolute;
height: 44px;
right: 0;
bottom: 0;
font-size: 14px;
padding: 0 12px;
}
发微博
发布
apiready = function() {
fixStatusBar();
}
//修复沉浸式头部高度
function fixStatusBar() {
var el = document.querySelector('header');
if (!el) {
return;
}
el.style.paddingTop = api.safeArea.top + 'px';
window.headerHeight = el.offsetHeight; // 获取header高度
}
相关问题推荐
、 黑盒测试:是一种常用的软件测试方法,它将被测软件看作一个打不开的黑盒,主要根据功能需求设计测试用例,进行测试。几种常用的黑盒测试方法和黑盒测试工具有,等价类划分法、边界值分析法、因果图法、决策表法。在实际运用中要选择合适的方法。二、 因果...
果图法是一种适合于描述对于多种输入条件组合的测试方法,根据输入条件的组合、约束关系和输出条件的因果关系,分析输入条件的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件涉及的各种组合情况。因果图法一般和判定表结合使用,通过映射同...
判定表(Decision Table)是分析和表达多逻辑条件下执行不同操作的情况下的工具.在程序设计发展的初期,判定表就已被当作编写程序的辅助工具了.由于它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确....
判定表通常有以下四个部分组成:1)条件桩(Condition Stub):列出了问题的所有条件。通常认为列出的条件的次序无关紧要。2)动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。3)条件项(Condition Entry):列出针对它左列...
长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是...
1) 边界值分析不是从某等价类中随便挑一个作为代表,而是使这个等价类的每个边界都要作为测试条件。2) 边界值分析不仅考虑输入条件,还要考虑输出空间产生的测试情况。
边界值分析方法是对等价类划分方法的补充. 长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.使用边界值分析方法设计测试用例...
在编程中,布尔量指一个真或假状态。通常它们分别用0,1或1,-1来表示,这和编程语言有关。具体来说当布尔量为真的时候表示一个表达式或判断成立,否则这个式子或判断不成立。你把它理解为成立或不成立就行了。...
1)输入条件规定取值范围,则卡定义一个有效等价类和两个无效等价类。例如学生成绩范围是0~100,则一个有效类:0
1,先确定等价类别2,找出有效等价类和无效等价类3,边界值找好,尽可能多的找的会有重复的数据4,有效等价类尽可能条件符合的归一起不要重复5,无效等价类单独写开6,写好测试用例7,执行测试用例...
应用场景:只要有数据输入的地方就可以采用等价类划分法。按照需求,把无穷多的数据进行分类,从中挑选出代表性数据进行测试。具体操作:(1)明确测试对象(测试什么)(2)划分等价类(按照需求分有效、无效)(3)细化等价类(有效、无效进行细化)(4)建...
采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。
Priority()和Severity(严重程度)是的两个重要属性。很多新人经常混淆这两个概念。通常,人员在提交Bug时,只定义Bug的Severity, 即该Bug的严重程度,而将Priority交给Project Leader 或Team Leader来定义,由他们来决定该Bug被修复的优先等级。某种意义上来说...
1致命:致命是指系统主要功能丧失,用户数据受到破坏,造成系统崩溃、悬挂、死机或者危及人身安全等的问题。例如程序所引起的死机,非法退出、死循环、数据库发生死锁、数据流环节上严重的数值计算错误、产品设计存在严重的安全问题、漏洞被利用后可能导致系统...
1、New:(新的)当某个bug被发现的时候(第一次),测试人员需要与项目负责人沟通以确认发现的的确是一个bug,如果被确认是一个bug,就将其记录下来,并将bug的状态设为New。2、Assigned(已指派的)当一个bug被指认为New之后,将其将给开发人员,开发人员将...
软件缺陷是计算机软件或程序中存在的某种破坏正常运行能力的问题、错误,或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。IEEE729-1983对缺陷有一个标准的定义:从产品内部看,缺陷是软件产品开发或维护过程中存在的错误、毛病等...