理财网站方案建设,智能建造师证书的含金量,长沙网站创建,2016网站谷歌权重2.2 Android P提供提供的刘海屏适配方案
对于有状态栏的页面#xff0c;不会受到刘海屏特性的影响#xff0c;因为刘海屏包含在状态栏中了#xff1b;全屏显示的页面#xff0c;系统刘海屏方案会对应用界面做下移处理#xff0c;避开刘海区显示#xff0c;这时会看到刘海…2.2 Android P提供提供的刘海屏适配方案
对于有状态栏的页面不会受到刘海屏特性的影响因为刘海屏包含在状态栏中了全屏显示的页面系统刘海屏方案会对应用界面做下移处理避开刘海区显示这时会看到刘海区域变成一条黑边完全看不到刘海了已经适配Android P应用的全屏页面可以通过谷歌提供的适配方案使用刘海区真正做到全屏显示。
2.3 Android P中支持的凹口屏幕类型
目前Android支持了三类凹口屏幕类型边角显示屏凹口斜刘海、双显示屏凹口刘海胡子、长型显示屏凹口刘海如下图所示 目前的手机主要还是长型显示屏凹口即刘海屏。其他斜刘海和胡子手机应该还没有实物吧反正是亮瞎了狗眼了。
2.4 刘海屏布局及安全区域说明 2.5 Android P中凹口屏幕相关接口
注意以下接口都是要Build.VERSION.SDK_INT 28才能调用到。
2.5.1 DisplayCutout类接口
主要用于获取凹口位置和安全区域的位置等。主要接口如下所示
方法接口说明getBoundingRects()返回Rects的列表每个Rects都是显示屏上非功能区域的边界矩形。getSafeInsetLeft ()返回安全区域距离屏幕左边的距离单位是px。getSafeInsetRight ()返回安全区域距离屏幕右边的距离单位是px。getSafeInsetTop ()返回安全区域距离屏幕顶部的距离单位是px。getSafeInsetBottom()返回安全区域距离屏幕底部的距离单位是px。
来看下例子。 这里将开发者选项中的模拟具有凹口的显示屏选项改为双显示屏凹口即这里应当有两个刘海然后直接上代码
public class NotchActivity extends Activity { Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
//开局就一张背景图 setContentView(R.layout.notch);
getNotchParams(); }
TargetApi(28) public void getNotchParams() { final View decorView getWindow().getDecorView();
decorView.post(new Runnable() { Override public void run() { DisplayCutout displayCutout decorView.getRootWindowInsets().getDisplayCutout(); Log.e(“TAG”, “安全区域距离屏幕左边的距离 SafeInsetLeft:” displayCutout.getSafeInsetLeft()); Log.e(“TAG”, “安全区域距离屏幕右部的距离 SafeInsetRight:” displayCutout.getSafeInsetRight()); Log.e(“TAG”, “安全区域距离屏幕顶部的距离 SafeInsetTop:” displayCutout.getSafeInsetTop()); Log.e(“TAG”, “安全区域距离屏幕底部的距离 SafeInsetBottom:” displayCutout.getSafeInsetBottom());
List rects displayCutout.getBoundingRects(); if (rects null || rects.size() 0) { Log.e(“TAG”, “不是刘海屏”); } else { Log.e(“TAG”, “刘海屏数量:” rects.size()); for (Rect rect : rects) { Log.e(“TAG”, “刘海屏区域” rect); } } } }); } }
输出结果为
06-04 21:57:10.120 5698-5698/? E/TAG: 安全区域距离屏幕左边的距离 SafeInsetLeft:0 06-04 21:57:10.120 5698-5698/? E/TAG: 安全区域距离屏幕右部的距离 SafeInsetRight:0 06-04 21:57:10.120 5698-5698/? E/TAG: 安全区域距离屏幕顶部的距离 SafeInsetTop:112 06-04 21:57:10.120 5698-5698/? E/TAG: 安全区域距离屏幕底部的距离 SafeInsetBottom:112 06-04 21:57:10.120 5698-5698/? E/TAG: 刘海屏数量:2 06-04 21:57:10.120 5698-5698/? E/TAG: 刘海屏区域Rect(468, 0 - 972, 112) 06-04 21:57:10.120 5698-5698/? E/TAG: 刘海屏区域Rect(468, 2448 - 972, 2560)
可以看到即距离顶部和底部各112px的区域就是安全区域了。
2.5.2 设置凹口屏幕显示模式
使用例子
WindowManager.LayoutParams lp getWindow().getAttributes(); lp.layoutInDisplayCutoutMode WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; getWindow().setAttributes(lp);
Android P中新增了一个布局参数属性layoutInDisplayCutoutMode包含了三种不同的模式如下所示
模式模式说明LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT只有当DisplayCutout完全包含在系统栏中时才允许窗口延伸到DisplayCutout区域。 否则窗口布局不与DisplayCutout区域重叠。LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER该窗口决不允许与DisplayCutout区域重叠。LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES该窗口始终允许延伸到屏幕短边上的DisplayCutout区域。
下面我们来写个Demo看下这三种模式的显示效果 Demo很简单就是显示一张背景图相关背景布局就不贴了来看下主要的代码
public class NotchActivity extends Activity { Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去掉标题 requestWindowFeature(Window.FEATURE_NO_TITLE); //开局就一张背景图 setContentView(R.layout.notch);
//全屏显示 getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
WindowManager.LayoutParams lp getWindow().getAttributes();
//下面图1 lp.layoutInDisplayCutoutMode WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER; //下面图2 // lp.layoutInDisplayCutoutMode WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES; //下面图3 // lp.layoutInDisplayCutoutMode WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT; getWindow().setAttributes(lp); } }
这里设置为全屏的显示效果三种模式的结果如下图所示 图一可以看到上面有黑边。 图二明显看到有刘海。 图三同样是黑边。
可以看到 LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES模式会让屏幕到延申刘海区域中。LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER模式不会让屏幕到延申刘海区域中会留出一片黑色区域。LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT模式在全屏显示下跟LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER一样。 我们再来看看LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT模式在沉浸式状态栏下的效果代码如下
public class NotchActivity extends Activity { Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //去掉标题 requestWindowFeature(Window.FEATURE_NO_TITLE); //开局就一张背景图 setContentView(R.layout.notch);
//全屏显示 // getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
//沉浸式状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
WindowManager.LayoutParams lp getWindow().getAttributes();
lp.layoutInDisplayCutoutMode WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT;
getWindow().setAttributes(lp);
} }
如下图所示 可以看到 当刘海区域完全在系统的状态栏时LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT的显示效果与LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES一致。 所以当我们进行刘海屏的适配时请根据实际情况去使用不同的layoutInDisplayCutoutMode。
2.6 那么刘海屏该如何适配呢
2.6.1 如果页面存在状态栏
那么很简单不用适配因为刘海区域会包含在状态栏中了。如果不想看到刘海区域可以使用LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER将刘海区域变成一条黑色边。
2.6.2 如果页面是全屏显示
不适配的话将会留出一条黑色边。
自我介绍一下小编13年上海交大毕业曾经在小公司待过也去过华为、OPPO等大厂18年进入阿里一直到现在。
深知大多数初中级安卓工程师想要提升技能往往是自己摸索成长但自己不成体系的自学效果低效又漫长而且极易碰到天花板技术停滞不前
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家初衷也很简单就是希望能够帮助到想自学提升又不知道该从何学起的朋友同时减轻大家的负担。
由于文件比较大这里只是将部分目录截图出来每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频 如果你觉得这些内容对你有帮助可以添加下面V无偿领取备注Android
文末
很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候总会遇到一些问题比如学了一段时间感觉没有方向感不知道该从那里入手去学习对此我整理了一些资料需要的可以免费分享给大家
这里笔者分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题把技术点整理成了视频和PDF实际上比预期多花了不少精力包含知识脉络 诸多细节由于篇幅有限这里以图片的形式给大家展示一部分。如有需要点击这里前往我的GitHub免费获取。 【视频教程】 天道酬勤只要你想大厂offer并不是遥不可及希望本篇文章能为你带来帮助如果有问题请在评论区留言。
取](https://bbs.csdn.net/topics/618156601)。
[外链图片转存中…(img-x4wnsbeL-1710498130328)]
[外链图片转存中…(img-ZZdRsLvy-1710498130328)]
【视频教程】
[外链图片转存中…(img-0TB9lmF7-1710498130329)]
天道酬勤只要你想大厂offer并不是遥不可及希望本篇文章能为你带来帮助如果有问题请在评论区留言。