引子

屏幕适配是 android 开发/面试 绕不开的一个问题。本文 将屏幕适配的 知识要点完整展现给各位读者。

正文大纲

  • android需要做屏幕适配的原因

  • 基础知识点(很重要)

  • 屏幕适配攻略

正文

android需要做屏幕适配的原因

关键字:android碎片化

android面世以来,google开源了android系统,各家厂商各自为政,导致屏幕尺寸没有统一标准,屏幕的宽高比各种各样,屏幕密度也是各个厂家攀比的资本, 导致Android开发者想要用一套代码来适配所有的设备变得格外的困难,虽然 谷歌出了 dp单位来替代px,但是 dp依然有它无法完全适配的地方。这个也就是需要我们利用其他手段去 完成适配的地方。

面试点

Q: 关于屏幕适配,为什么 有了 dp单位,依然要适配呢?

A: dp虽然能够解决大部分情况下的适配问题,但是针对少数机型,无法适配, 原因 是:google提供的 dp单位,在现有的 android市场环境下,是 不可靠的,编码时的 dp,在运行时会转化成 px,此时的px不能准确对照UI的原本设计。最直观体现就是: 同样 300dp,在A手机上可以占满全宽,但是在B手机上,占不满,或者会超出全宽至于为什么dp不可靠? 后面会解释。

基础知识点(很重要)

以下概念很基础,但是也很重要,基础知识缺少一个环节,后面复杂的攻略理解起来就有障碍。

1. 像素点

像素点是物理概念,用术语来解释,就是如下这段话:通常所说的像素,就是CCD/CMOS上光电感应元件的数量,一个感光元件经过感光,光电信号转换,A/D转换等步骤以后,在输出的照片上就形成一个点,我们如果把影像放大数倍,会发现这些连续色调其实是由许多色彩相近的小方点所组成,这些小方点就是构成影像的最小单位“像素”(Pixel)。简而言之,像素就是手机屏幕的最小构成单元。

简单来说,像素点就是 屏幕上色彩区域的最小单位。在所有的设备上,1px 都是等同的。UI小姐姐作图一般都会以px为单位。

2. 分辨率

比如:19201080 分辨率,表示当前设备的屏幕是由 横向1080 纵向1920 个像素点 组合而成。

3. 屏幕尺寸

屏幕对角线的长度。一般以英寸为单位,常见的屏幕尺寸有 4.75.56.0

4. 屏幕像素密度

定义一平方英寸面积内,存在 多少个像素点。同样是 1920*1080 的分辨率,存在两款手机,一个是4.7英寸,一个是6.0英寸,这两者的 像素密度是不一样的。屏幕密度的单位: dpi(dots per inch).标准屏幕分辨率 :160dpi 。即:一平方英寸面积,存在 160像素点。(mdpi).

5. 屏幕尺寸,分辨率,像素密度 三者之间的关系

像素密度,可以由 屏幕尺寸分辨率计算得出。计算公式为:比如下图所示:

我这里有一块1920*1080的5寸屏幕,通过上面的公式计算得出,它的像素密度为 440dpi . 可见,px是和像素密度有直接关系的 像素单位。

6. 密度无关的像素单位(dp,或者dip)

全英文为:density-independent pixel.(注意此处是 dip,上面的像素密度是 dpi, 千万不要因为这个,在面试的时候出丑 )使用dp作为长度单位,可以保证在不同的屏幕像素密度的手机上显示 很相似的效果。比如: 使用 480x800的手机上,要画一条长度为一半屏幕宽的线条,我们可以设置线条的长度为 240px,而在 320x480的屏幕上,我们只需要 160px,但是我们可以直接使用 160dp,来同时让两个屏幕上的这条线占全宽的一半。

px和dp的换算公式为:px=dp*(dpi/160)公式解读:如果有一个屏幕密度为 160dpi的手机,在它上面,1px=1dp;而如果是 320dpi的手机,则 1px = 0.5dp. 简而言之规律就是:屏幕像素密度(dpi)越高的手机,1dp所代表的px就越多.

下面解释为什么dp有时候靠不住.

如果UI小姐姐以 320*480 dpi160的屏幕为标准,画了一条长度为 160px的线,长度为屏幕宽度的 一半,这个时候,你直接用 160dp,一般就能完成适配。但是如果这样的布局 运行在 320x480分辨率,但是屏幕密度为 150dpi 略小于 160dpi,这个时候 你布局里面写的 160dp就会实际超过 160px 不再是占屏幕宽的一半,而是略微超过。

7. 独立比例像素 (sp)

全英文为: scale-independent pixel (简称sp或者sip)专门用于字体大小表示。推荐使用 12sp以上的偶数作为 字体大小, 不要使用奇数,或者浮点型小数,因为容易造成精度丢失。

面试点

Q: sp和dp有什么区别?

A: 通常情况下,dp和sp效果类似,但是有一点,如果用户 调整了手机字体,比如 从标准,变成了 超大,那么,1dp 原本等于1px依然不变,但是1sp就会从1px变成3px(只是举个例子,数值不必认真). 因此,在用户调整字体的情况下,同样的布局,可能出现 窗口大小不变,但是文字尺寸发生变化的情况。

屏幕适配攻略

1. 布局适配

使用多套布局适应不同屏幕。此方法必须要了解 布局限定符的概念。如图:限定符: 在原本的 layout后面加上横杠,然后加上限定名。形成 layout-XXX的形式,具体规则请参考谷歌官网: https://developer.android.google.cn/training/multiscreen/screensizes, 重点摘录如下:使用上面的限定符,几乎可以解决所有的适配问题,但是另外还有一个小技巧帮我们节省工作量 :布局别名. 适用情形为:当多个加了限定符的 layout.xml中都引用了同一个 子布局,而子布局的内容可能相同,也可能不同。这个时候,使用布局别名,可以节省操作量。

方案评价: 讲道理,这个是 下下策,因为在你需要修改布局的时候,你可能需要修改多套布局,这个要多恶心就多恶心,懂的人都懂.

2. 代码适配

我们通过java代码去获取屏幕的宽高,动态去指定控件的宽高 。获取屏幕宽高的方式我不想在这里占篇幅,读者可自行百度或者看看这一篇文章,他写得比较到位 https://www.jianshu.com/p/1a931d943fb4 . 代码适配,一般用于动态创建 控件,或者自定义view自己绘制图形的时候。特别提一下接口适配:当你去向后台请求图片的时候,我们可以在参数中带入屏幕的宽高,或者是控件的宽高,来获取我们想要的图片,在图片返回之后直接就能显示得最优,而不需要我们app代码中多动手脚。

方案评价:这个比下下策稍微好一点,但是 控件大小直接进入了代码,还是让代码不够雅观.

3. 布局组件的适配

尽量直接通过一套布局解决所有的麻烦,这个就叫布局组件的适配。这个是上上策. 包含如下手段:

  • 使用像素密度无关的单位 dp sp

  • 杜绝使用绝对布局,多使用相对和线性布局

  • 多使用 wrapcontent matchparent 以及线性布局的权重

  • 多用 minWidth minHeight,lines 等属性

  • 使用多套限定的 dimens中定义的尺寸

可能面试点

Q:同一个布局文件中,我使用线性布局和相对布局都可以达成目的,那么如何抉择?

A: 使用相对布局,很有可能出现 第一次测量"不满意"的情况,从而会测量第二次。如果两者都可以达成目的,并且两者的布局层级相同,并且线性布局中没有使用到 权重( 权重可能也会触发第二次测量),此时,优先使用线性布局。 除此之外,都选择相对布局。

结语

屏幕适配,工作中并不困难,但是面试多会问到。现今主流的两种完美适配方案,有头条方案(直接变更DisplayMetrics中的density),以及 多套dimens适配方案,两者各有千秋。下一篇文章继续讲吧。

万水千山总是情,点个在看行不行

android 修改 dpi_Android屏幕适配重点盘点相关推荐

  1. android dp sp px_Android屏幕适配★★重点盘点★★

    引言 屏幕适配是 android 开发/面试 绕不开的一个问题.本文 将屏幕适配的知识要点完整展现给各位读者. 正文大纲 android需要做屏幕适配的原因 基础知识点(★★★很重要★★★) 屏幕适配 ...

  2. android 多套布局适配,Android屏幕适配 重点盘点

    引子 屏幕适配是 android 开发/面试 绕不开的一个问题.本文 将屏幕适配的知识要点完整展现给各位读者. 正文大纲 android需要做屏幕适配的原因 基础知识点(很重要) 屏幕适配攻略 正文 ...

  3. Android高手笔记-屏幕适配 UI优化

    Android高手笔记-屏幕适配 & UI优化 屏幕与适配 由于Android碎片化严重,屏幕分辨率千奇百怪,而想要在各种分辨率的设备上显示基本一致的效果,适配成本越来越高: 屏幕适配究其根本 ...

  4. 《转》Android 今日头条屏幕适配方案终极版正式发布!

    概述 Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解. 刚好,近期准备对糗事百科Android客 ...

  5. 兮°Android下的屏幕适配问题的一点心得

    来csdn也有好久了,以前也只是看博客逛论坛从不发言论,俗称:僵尸用户吧.然后心里默默的欣赏着,哇塞,都是大牛,其实自己也有积累一些心得,但是又觉得类似的资源在网上一抓一大把,写得不好的话也没人来看, ...

  6. Android笔记之屏幕适配全攻略

    Android屏幕适配出现的原因 在我们学习如何进行屏幕适配之前,我们需要先了解下为什么Android需要进行屏幕适配. 由于Android系统的开放性,任何用户.开发者.OEM厂商.运营商都可以对A ...

  7. Android权威官方屏幕适配全攻略

    Android的屏幕适配一直以来都在折磨着我们这些开发者,本篇文章以Google的官方文档为基础,全面而深入的讲解了Android屏幕适配的原因.重要概念.解决方案及最佳实践,我相信如果你能认真的学习 ...

  8. 【Android】之屏幕适配

    前言 Android 系统能发展到今天,离不开其开源性,但是随着越来越多的设备接入 Android 系统,并对 Android 系统进行各种各样的定制,导致长期以来出现了各种碎片化严重的问题.例如,A ...

  9. Android性能优化—屏幕适配方案

    为什么要做适配?Android碎片化 Android系统碎片化:基于Google原生系统,小米定制的MIUI.魅族定制的flyme.华为定制的EMUI等等: Android机型屏幕尺寸碎片化:5寸.5 ...

最新文章

  1. SublimeText设置在浏览器打开 快捷键
  2. VTK:vtkCellArray用法实战
  3. python中label组件参数_python中连接的组件标签
  4. 上海市城镇廉租住房申请条件
  5. java gui 控制台_在GUI面板中创建Java控制台
  6. 魔兽怀旧网站模块下载_一个人的网站重新设计和怀旧
  7. sublime text 3 前端开发常用插件
  8. Kafka 2.0 升级,看看携程怎么操作!
  9. macos远程桌面连接_如何在macOS中使用Microsoft远程桌面连接Amazon EC2
  10. Kafka eagle 安装
  11. 【CS Round #46 (Div. 1.5) B】Letters Deque
  12. 视频翻译软件有哪些?好用的视频翻译软件推荐
  13. 异数OS-织梦师-PBFT(六) 走出区块链,加速破解PBFT
  14. java输入数字星期,输出英文
  15. 中国人民大学与加拿大女王大学金融硕士让你在疫情下的学习有更多的选择
  16. 计算机按键 shift的作用,电脑shift键的十一个妙用
  17. .so文件移动游戏破解范例
  18. ROS学习笔记publisher的编程实现c++详解
  19. 【无标题】PMP强化练习正确题一
  20. 华东师大在职计算机分数线,报考华东师范大学在职研究生分数线是多少呢?

热门文章

  1. 苹果CEO库克:与乔布斯会面5分钟决定加盟苹果
  2. [OpenCV实战]6 图像拼接和图像融合
  3. python第三章练习题
  4. 使用Au进行人声噪声混合
  5. 5g无线图传信号测试软件,5G时代,移动无线图传网络构架和无线图传传输技术...
  6. 3D游戏建模布线方法
  7. 无线传感器网络定位问题的大象群优化算法
  8. Java 继承 与 抽象类
  9. cocos2dx Demo
  10. 运用瀑布模型完成PL/SQL程序设计