300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Android刘海屏 水滴屏全面屏适配详解 997页字节跳动Android面试真题解析火爆全网

Android刘海屏 水滴屏全面屏适配详解 997页字节跳动Android面试真题解析火爆全网

时间:2021-05-27 17:53:49

相关推荐

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_DEFAULTLAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGESLAYOUT_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 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

[外链图片转存中…(img-tHj8aLY5-1647697623385)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。