`

分享一点关于Android屏幕适配的种种

阅读更多

引子

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

正文大纲

  • android需要做屏幕适配的原因
  • 基础知识点(很重要)
  • 屏幕适配攻略

分享一下自己在面试过程中整理的面试学习路线(PDF版本如下)

Android核心技术面试必备.png

请查看完整的PDF版
(更多完整项目下载。未完待续。源码。图文知识后续上传github。)
可以点击关于我联系我获取完整PDF
(VX:mm14525201314)

引子

屏幕适配是 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.7 , 5.5 , 6.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代码去获取屏幕的宽高,动态去指定控件的宽高 。获取屏幕宽高的方式

代码适配,一般用于动态创建 控件,或者自定义view自己绘制图形的时候。特别提一下接口适配:当你去向后台请求图片的时候,我们可以在参数中带入屏幕的宽高,或者是控件的宽高,来获取我们想要的图片,在图片返回之后直接就能显示得最优,而不需要我们app代码中多动手脚。

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

3. 布局组件的适配

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

  • 使用像素密度无关的单位 dp sp
  • 杜绝使用绝对布局,多使用相对和线性布局
  • 多使用 wrapcontent matchparent 以及线性布局的权重
  • 多用 minWidth minHeight,lines 等属性
  • 使用多套限定的 dimens中定义的尺寸

可能面试点

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

结语

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

 

查看完整的PDF版
(更多完整项目下载。未完待续。源码。图文知识后续上传github。)
可以点击关于我联系我获取完整PDF
(VX:mm14525201314)

image

 

分享到:
评论

相关推荐

    Android屏幕适配资源

    在Android应用开发中,屏幕适配是一个至关重要的环节,因为Android设备有着各种不同的屏幕尺寸和分辨率。本资源包"Android屏幕适配资源"专注于解决这一问题,提供了values资源,能够帮助开发者轻松实现不同屏幕尺寸...

    Android 屏幕适配工具

    在Android开发中,屏幕适配是一项至关重要的任务,因为Android设备拥有各种各样的屏幕尺寸、分辨率和像素密度。为了确保应用程序在所有设备上都能提供一致且良好的用户体验,开发者需要掌握有效的屏幕适配策略。...

    Android屏幕适配生成文件

    Android屏幕适配生成文件

    Android-今日头条屏幕适配方案终极版一个极低成本的Android屏幕适配方案

    【Android屏幕适配方案终极版】是Android开发者面临的一个重要课题,尤其是在当今各种设备尺寸繁多的情况下。今日头条作为一款广受欢迎的信息聚合应用,其屏幕适配策略无疑具有很高的参考价值。这个低成本的解决方案...

    android屏幕适配px工具类

    在Android开发中,屏幕适配是一项重要的工作,尤其是在面对各种尺寸和分辨率的设备时。"android屏幕适配px工具类"就是为了解决这一问题而设计的,它可以帮助开发者更方便地处理像素(px)单位转换,确保应用在不同...

    android屏幕适配方法

    android屏幕适配方法

    Android代码-今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案

    A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案). Overview Pixel 2 XL | 1440 x 2880 | 560dpi: Pixel XL | 1440 x 2560 | 560dpi: ...

    android屏幕适配方案

    在Android开发中,屏幕适配是一项至关重要的任务,因为Android设备有着广泛的屏幕尺寸和分辨率,从小型手机到大型平板电脑不一而足。一个良好的屏幕适配方案能够确保应用程序在不同设备上显示一致且用户体验良好。...

    Android屏幕适配主流方案的对比和集成

    在Android开发中,屏幕适配是一项至关重要的任务,因为Android设备拥有广泛的屏幕尺寸和分辨率。本文将详述几种主流的Android屏幕适配方案,并进行对比分析,帮助开发者选择最适合项目需求的方法。 一、密度无关...

    Android-针对Android屏幕适配所整合的几种常用方案

    在Android应用开发中,屏幕适配是一个至关重要的环节,因为Android设备有着丰富的屏幕尺寸和分辨率。本篇文章将详细探讨几种常见的Android屏幕适配方案,帮助开发者解决不同设备间界面显示不一致的问题。 1. **使用...

    android 屏幕适配方案小工具(可执行jar包)

    android 屏幕适配方案小工具(可执行jar包)

    Android屏幕适配:dimens自动生成工具以及使用方法,亲测好用

    在Android应用开发中,屏幕适配是一个至关重要的环节,因为Android设备有着各种不同的屏幕尺寸和分辨率。`dimens.xml`文件是Android系统提供的一种资源文件,用于存储尺寸相关的常量,如字体大小、间距、控件尺寸等...

    Android autolayout 屏幕适配

    在Android开发中,屏幕适配是一项重要的任务,尤其是在全球用户使用的设备种类繁多,屏幕尺寸、分辨率各异的情况下。"Android autolayout"是Google推出的一种解决屏幕适配问题的方案,它旨在帮助开发者创建能够自动...

    android 屏幕适配工具

    提供了android 屏幕适配方案,使用教程 https://blog.csdn.net/qq_17827919/article/details/81027491。

    Android 屏幕适配总结

    Android 屏幕适配思维导图,花了两天的时间总结出来的,看思维导图会以一个整体的印象,有利于快速理解Android 屏幕适配的问题。

    Android屏幕适配smallestWidth适配尺寸文件

    在Android开发中,屏幕适配是一项重要的任务,因为Android设备有着广泛的屏幕尺寸和分辨率。"smallestWidth"(sw)适配策略是Android系统提供的一种智能解决方案,它允许开发者为不同大小的屏幕创建不同的资源文件夹...

    android屏幕适配工具

    在Android应用开发中,屏幕适配是一个至关重要的环节,因为Android设备有着各种不同的屏幕尺寸和分辨率,这使得应用能在各种设备上保持良好的显示效果成为一项挑战。本篇将详细讲解"android屏幕适配工具"的相关知识...

    Android屏幕字体适配源码

    在Android开发中,屏幕适配和字体适配是至关重要的环节,尤其是在面对各种不同尺寸、分辨率的设备时。本文将详细解析"Android屏幕字体适配源码",旨在帮助初学者理解和掌握这一关键技术。 首先,Android系统允许...

    Android-androidUI适配屏幕适配

    在Android应用开发中,屏幕适配是一个至关重要的环节,因为Android设备有着丰富的屏幕尺寸和分辨率。本篇文章将深入探讨如何进行Android UI的适配工作,确保应用在不同设备上都能呈现出良好的视觉效果和用户体验。 ...

    android屏幕适配.PPT版

    android屏幕适配文档

Global site tag (gtag.js) - Google Analytics