为什么要进行屏幕适配

屏幕碎片化表现为以下几个方面:

1:屏幕尺寸碎片化:

2:屏幕密度碎片化

3:厂商碎片化:水滴屏,刘海屏

屏幕适配常见方式

谷歌推出的百分比布局

手写百分比布局;

为什么百分比布局要这么写:

子控件的属性的创建依赖于父容器的LayoutParams,查看源码可得。。。

所以如果实现自定义布局,自定义布局的属性也需要继承自父容器的LayoutParams

density:屏幕密度,android系统内部对一个尺寸的分辨率,缩放比率,屏幕上每一寸有160个px,就是density的值

例如,如果某个屏幕的某英寸达到了320px,那么density是2; 类似于缩放比例的scale

scaleDensity:字体缩放比率,默认跟density一样的

densityDpi:屏幕上每一英寸的像素点有多少个,160 或  320 有多少个

android显示最终都会转化成px来显示,同一个分比率下的density也不一样,

缺点:暂时没有发现

例如

运行效果:系统的黑边就是系统对他的默认处理,就是将内容区域进行向下移动,所以需要适配:

那么我们能用谷歌官方9.0的对这个的处理:一共有三种方式

首先两点,application的

android:theme="@style/Theme.AppCompat.Light.NoActionBar

下面window的API是

targetSdkVersion 28

第二种是允许内容区域进入刘海屏区域,白色部分为顶层布局背景是白色,只需要做沉浸式就可以了

第三种是不管是否为全屏模式,都不允许进入刘海区域

第二种                                      第三种/全屏模式                     第三种非全屏模式

好的  下面我们就把二种设置成沉浸式

运行结果:我大胡歌真的好帅啊!!!!!

总结:

适配刘海屏

1:设置全屏

   //1.设置全屏requestWindowFeature(Window.FEATURE_NO_TITLE);Window window = getWindow();window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

2:让内容区域延申进刘海

 //判断手机是否是刘海屏boolean hasDisplayCutout = hasDisplayCutout(window);if (hasDisplayCutout){//2.让内容区域延伸进刘海WindowManager.LayoutParams params = window.getAttributes();/***  * @see #LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT 全屏模式,内容下移,非全屏不受影响*  * @see #LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES 允许内容去延伸进刘海区*  * @see #LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER 不允许内容延伸进刘海区*/params.layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;window.setAttributes(params);
    private boolean hasDisplayCutout(Window window) {DisplayCutout displayCutout;View rootView = window.getDecorView();WindowInsets insets = rootView.getRootWindowInsets();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && insets != null){displayCutout = insets.getDisplayCutout();if (displayCutout != null){if (displayCutout.getBoundingRects() != null && displayCutout.getBoundingRects().size() > 0 && displayCutout.getSafeInsetTop() > 0){return true;}}}return true; //因为模拟器原因,这里设置成true}

3:设置成沉浸式

  //3.设置成沉浸式int flags = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;int visibility = window.getDecorView().getSystemUiVisibility();visibility |= flags; //追加沉浸式设置window.getDecorView().setSystemUiVisibility(visibility);

刘海屏设计的时候需要避免页面设计在刘海屏位置   或者直接将内容区域下移动,

   //通常情况下,刘海的高就是状态栏的高public int heightForDisplayCutout(){int resID = getResources().getIdentifier("status_bar_height", "dimen", "android");if (resID > 0){return getResources().getDimensionPixelSize(resID);}return 96;}

其他手机厂商(华为,小米,oppo,vivo)适配

华为:htttps://devcenter-test.huawei.com/consumer/cn/devservice/doc/50114

小米:https://dev.mi.com/comsole/doc/detail?pid=1293

oppo:https://open.open.oppombile.com/service/message/dtail?id=61876

vivo:https://dev.vivo.vom.vn/documentCenter/doc/103

华为的官方文档没有了,下面是我从其他博客找的 ,跟上面的适配差不多:

原博客地址:https://blog.csdn.net/xiangzhihong8/article/details/80317682

以上,下面开始介绍网易云音乐的屏幕适配

一  对比其他适配方式:

限定符适配:

app会根据当前手机的分辨率自动选择对应的dimen.xml

优点:适配比较精确

缺点:增加apk大小  适配机型越多,需要的xml也就越多

适配所有机型的分辨率,xml文件加起来有3m的大小

百分比适配:

优点:通过百分比定义宽度,高度,比较方便

彻底抛弃ps  dp单位 通过百分比实现,可以在布局完成      适配

对开发者工作量减少

缺点:需要对页面的容器都用自定义的

网易云代码动态适配

是通过代码对需要适配的布局进行动态计算:

Demo整理好以后再更新~

Android高级-网易云音乐屏幕适配相关推荐

  1. Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路...

     Android版网易云音乐唱片机唱片磁盘旋转及唱片机机械臂动画关键代码实现思路 先看一看我的代码运行结果. 代码运行起来初始化状态: 点击开始按钮,唱片机的机械臂匀速接近唱片磁盘,同时唱片磁盘也 ...

  2. Android 仿网易云音乐App

    因为工作实在是有点忙,所以还没完成成品,就先挂到GitHub上.日后慢慢更新啦. 项目地址 GitHub地址,希望大佬们点个star GitHub仿网易云音乐App 效果展示 注:因为视频太模糊,每日 ...

  3. Android获取网易云音乐歌曲详细信息

    Android获取网易云音乐歌曲详细信息 一.目标 二.实现方案 三.最终方案 四.遗留问题 五.接下来 六.Finally 在<Android获取歌曲详细信息>一文中,介绍了几种获取网易 ...

  4. android 音乐播放器专辑图片旋转,Android实现网易云音乐的旋转专辑View

    本文实例为大家分享了Android实现网易云音乐的旋转专辑View,供大家参考,具体内容如下 一.前言 最近做过 类似网易云音乐专辑唱片的效果,这里记录下开发思路,仅供参考.但需求不完全与网易云音乐一 ...

  5. android 网易云音乐上滑动画,Android 仿网易云音乐 音轨跳动效果

    网易云音乐的Loading效果,大家应该也比较熟悉了,效果是一个红色音轨不断跳动的效果,一般用于Loading等待时填充使用.本篇来自定义这个效果. Android 仿网易云音乐 音轨跳动View.g ...

  6. android仿网易云音乐、即时通讯、bilibili、沙漏动画等源码

    Android精选源码 android仿网易云音乐安卓版源码 android开源即时通讯,实时传讯IM源码 android类似淘宝的商品详情页源码 android面向.艺术家.设计师等创意类作品源码 ...

  7. android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、风扇叶片效果等源码...

    2019独角兽企业重金招聘Python工程师标准>>> Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android ...

  8. android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、爆炸菜单、风扇叶片效果等源码

    Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android Srt和Ass字幕解析器 Material Design ViewPage ...

  9. android仿网易云音乐引导页、仿书旗小说Flutter版、ViewPager切换、爆炸菜单、风扇叶片效果等源码...

    Android精选源码 复现网易云音乐引导页效果 高仿书旗小说 Flutter版,支持iOS.Android Android Srt和Ass字幕解析器 Material Design ViewPage ...

最新文章

  1. C时间函数ctime返回值的探讨
  2. mini CentOS7 安装 mysql
  3. 【数据分析R语言系列】R和RStudio的下载和安装, R在 Ubuntu 和CentOS 系统下的安装
  4. C语言实现Dijkstra(迪杰斯特拉)算法(附完整源码)
  5. 一个托盘程序演示 -闹钟 Alert
  6. 【CodeForces - 144C】Anagram Search(尺取,滑窗问题,处理字符串计数)
  7. xcode8注释快捷键失效问题
  8. JAVA jdk安装
  9. mysql修改数据存放位置_Mysql 修改数据库存放位置
  10. 不会装系统?有这篇就够了!
  11. 阿里天池供应链需求预测比赛小结
  12. coreldraw x5 选择工具快捷键_CorelDRAW设置和优化提高工作效率
  13. owa outlook使用中的一些问题-陆续添加
  14. 主键中的mappdeBy的使用方法
  15. 司机秘书:让司机省心的违章查询助手
  16. 学习日常英语(每天更新10+—)
  17. Word目录中自动添加自定义样式的多级标题的方法
  18. 外贸小白适合哪种邮箱?
  19. 请尝试写一个验证Email地址的正则表达式。版本一应该可以验证出类似的Email —— python学习笔记
  20. 自动化运维批量管理saltstack

热门文章

  1. multisim13学习_基于Multisim13数字流水灯电路设计与仿真 - 镇江高专学报.PDF
  2. 科技新品 | FOSSIL太阳能系列限量腕表;富士通40ppm高速扫描仪;Apple AirTag安全支架...
  3. matlab 多序列比对,MAFFT 进行多序列比对
  4. 京东智联云媒体处理服务再升级
  5. POI - 读取Excel2003、Excel2007或更高级的兼容性问题
  6. python爬取b站评论_Python爬虫入门【19】: B站博人传评论数据抓取 scrapy
  7. mybatis-plus @TableLogic 逻辑删除 恢复 自定义方法
  8. 全国一级计算机考证官网
  9. 概率密度函数、分布函数区别
  10. 复选框批量删除-ajax-ssm项目(update实现假删除)