Android刘海屏、水滴屏全面屏适配详解,997页字节跳动Android面试真题解析火爆全网
适配方式
适配方式有两种:
- 将targetSdkVersion版本设置到API 24及以上;
这个操作将会为<application>
标签隐式添加一个属性,android:resizeableActivity=“true”, 该属性的作用后面将详细说明。
- 在 标签中增加属性:android:resizeableActivity=“false”,同时在节点下增加一个meta-data标签:
原理说明
在 Android 7.0(API 级别 24)或更高版本的应用,android:resizeableActivity属性默认为true(对应适配方式1)。这个属性是控制多窗口显示的,决定当前的应用或者Activity是否支持多窗口。
可以在清单的<activity>
或 `
`节点中设置该属性,启用或禁用多窗口显示,配置如下:
android:resizeableActivity=[“true” | “false”]
如果该属性设置为 true,Activity 将能以分屏和自由形状模式启动。 如果此属性设置为 false,Activity 将不支持多窗口模式。 如果该值为 false,且用户尝试在多窗口模式下启动 Activity,该 Activity 将全屏显示。
适配方式2即为设置屏幕的最大长宽比,这是官方提供的设置方式。
如果设置了最大长宽比,必须android:resizeableActivity=“false”。 否则最大长宽比没有任何作用。
适配刘海屏
Android9.0适配
Android P(9.0)开始,官方开始提供了官方的挖孔屏适配API,具体可以参考Support display cutouts。
通过Android P提供的 DisplayCutout 类,可以确定非功能区域的位置和形状,这些区域不应显示内容。 要确定这些凹口屏幕区域是否存在及其位置,请使用 getDisplayCutout() 函数。
全新的窗口布局属性 layoutInDisplayCutoutMode 让您的应用可以为设备凹口屏幕周围的内容进行布局。 您可以将此属性设为下列值之一:
- LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
- LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
- LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER
默认值是LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT,刘海区域不会显示内容,需要显示时可以将值设置为LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES。
您可以按如下步骤在任何运行 Android P 的设备或模拟器上模拟屏幕缺口:
- 启用开发者选项;
- 在 Developer options 屏幕中,向下滚动至 Drawing 部分并选择 Simulate a display with a cutout。
适配参考示例:
// 延伸显示区域到刘海
WindowManager.LayoutParams lp = window.getAttributes();
lp.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
window.setAttributes(lp);
// 设置页面全屏显示
final View decorView = window.getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
其中延伸显示区域到刘海的代码,也可以通过修改Activity或应用的style实现,例如:
<?xml version="1.0" encoding="utf-8"?>
Android O 适配
因Google官方的适配方案到Android P才推出,因此在Android O(8.0版本)设备上,各家厂商有自己的实现方案。
华为Android O适配
方案一:
- 具体方式如下所示:
- 对Application生效,意味着该应用的所有页面,系统都不会做竖屏场景的特殊下移或者是横屏场景的右移特殊处理。例如:
- 对Activity生效,意味着可以针对单个页面进行刘海屏适配,设置了该属性的Activity系统将不会做特殊处理。例如:
方案二:
对Application生效,意味着该应用的所有页面,系统都不会做竖屏场景的特殊下移或者是横屏场景的右移特殊处理。
1,设置应用窗口在华为刘海屏手机使用刘海区。
/刘海屏全屏显示FLAG/
public static final int FLAG_NOTCH_SUPPORT=0x00010000;
/**
- 设置应用窗口在华为刘海屏手机使用刘海区
- @param window 应用页面window对象
*/
public static void setFullScreenWindowLayoutInDisplayCutout(Window window) {
if (window == null) {
return;
}
WindowManager.LayoutParams layoutParams = window.getAttributes();
try {
Class layoutParamsExCls = Class.forName(“com.huawei.android.view.LayoutParamsEx”);
Constructor con=layoutParamsExCls.getConstructor(LayoutParams.class);
Object layoutParamsExObj=con.newInstance(layoutParams);
Method method=layoutParamsExCls.getMethod(“addHwFlags”, int.class);
method.invoke(layoutParamsExObj, FLAG_NOTCH_SUPPORT);
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException |InstantiationException
| InvocationTargetException e) {
Log.e(“test”, “hw add notch screen flag api error”);
} catch (Exception e) {
Log.e(“test”, “other Exception”);
}
}
2.清除添加的华为刘海屏Flag,恢复应用不使用刘海区显示。
public static void setNotFullScreenWindowLayoutInDisplayCutout (Window window) {
if (window == null) {
return;
}
WindowManager.LayoutParams layoutParams = window.getAttributes();
try {
Class layoutParamsExCls = Class.forName(“com.huawei.android.view.LayoutParamsEx”);
Constructor con=layoutParamsExCls.getConstructor(LayoutParams.class);
Object layoutParamsExObj=con.newInstance(layoutParams);
Method method=layoutParamsExCls.getMethod(“clearHwFlags”, int.class);
method.invoke(layoutParamsExObj, FLAG_NOTCH_SUPPORT);
} catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException |InstantiationException
| InvocationTargetException e) {
Log.e(“test”, “hw clear notch screen flag api error”);
} catch (Exception e) {
Log.e(“test”, “other Exception”);
}
}
总结
【Android 详细知识点思维脑图(技能树)】
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
[外链图片转存中…(img-tHj8aLY5-1647697623385)]
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
Android刘海屏、水滴屏全面屏适配详解,997页字节跳动Android面试真题解析火爆全网相关推荐
- Android冷启动优化解析,997页字节跳动Android面试真题解析火爆全网
ThisTime:是指调用过程中最后一个Activity启动时间到这个Activity的 startActivityAndWait调用结束; TotalTime:是指调用过程中第一个Activity的 ...
- TextView AutoLink, ClikSpan 与长按事件冲突的解决,Android面试真题解析火爆全网
} } } 首先调用 Linkify.addLinks 方法解析 autolink 的相关属性 判断是否 mLinksClickable mLinksClickable && !tex ...
- Android面试真题解析火爆全网,薪资翻倍
一些闲言闲语 风萧萧兮易水寒,壮士一去兮怎么还? 卑微小刘在线征婚?啊,呸.说错了,卑微小刘在线求面试资料啊! 不知道,大家有没有过这样的经历,这个故事还要从很久很久以前讲起,从前有一个美丽的小村庄- ...
- 996页阿里Android面试真题解析火爆全网,分享面经!
导语 学历永远是横在我们进人大厂的一道门槛,好像无论怎么努力,总能被那些985,211 按在地上摩擦! 不仅要被"他们"看不起,在HR挑选简历,学历这块就直接被刷下去了,连证明自己 ...
- 牛笔了!Android面试真题解析火爆全网,面试必备
开头 最近有粉丝反应,不想做安卓了,有朋友转到前端了,安卓不行了,问我怎么办? 自从RN,Weex这种跨平台编程语言出来以后,安卓将死的言论总是不绝于耳.随着颇有摧枯拉朽之势Flutter的出现,加之 ...
- 997页字节跳动Android面试真题解析火爆全网,分享两道阿里P7究极难度算法题
开头 经常有网友在知乎问答提两个问题:"现在学习移动开发还有前景吗?""开发还有什么可以研究的?".网友回复:"现在还学移动开发,如同49年加入国军. ...
- 996页阿里Android面试真题解析火爆全网,全网首发!
在安卓系统中: 当系统内存不足时,Android系统将根据进程的优先级选择杀死一 些不太重要的进程,优先级低的先杀死.进程优先级从高到低如下. 前台进程 处于正在与用户交互的activity 与前台a ...
- 膜拜大佬!Android面试真题解析火爆全网,完整PDF
目录 想要成为一名优秀的Android开发,你需要一份完备的知识体系,在这里,让我们一起成长为自己所想的那样. PagerAdapter 介绍 ViwePager 缓存策略 ViewPager 布局处 ...
- Android刘海屏、水滴屏全面屏适配详解,android开发实战湖南师范大学出版社
android:resizeableActivity=["true" | "false"] 如果该属性设置为 true,Activity 将能以分屏和自由形状模 ...
最新文章
- 获取app传入的json值处理
- [Java] 实验4參考代码
- matlab gui优化,matlabgui优化程序
- LSTM入门学习——结合《LSTM模型》文章看
- Linux基础(九)--定时任务
- 破解面试难题8个角度带你解读SQL面试技巧!
- body里写注释 postman_是时候扔掉 Postman 了,试试 IntelliJ IDEA 自带的高能神器!
- 《python接口自动化测试》笔记
- shell 脚本运算符
- asp.net服务器控件开发-学习之路(一)
- html滑动验证图片,滑动验证 和滑动图片验证JS
- STM8S 低功耗模式
- 一文详解什么是空洞卷积?
- vue+elementui+阿里icon unicode 踩坑
- Python机器学习日记(十三)
- error: Apostrophe not preceded by \ (in XXX.)
- bestCoder 百度之星程序设计资格赛 1005下棋
- 哪个骨传导蓝牙耳机的好,推荐几款口碑高的骨传导耳机
- mysql-日志分析
- 跑赢新趋势 | 未来3-5年,运维人的机会在哪里?