写点什么

2021Java 面经:Android 屏幕适配 - 重点盘点

发布于: 2021 年 08 月 04 日

消息中间件合集:MQ(ActiveMQ/RabbitMQ/RocketMQ)+Kafka+笔记

最近有好多朋友都去投岗秋招提前批,面完回来跟我说碰到消息中间件一类的问题就挂了。额,有点不知所措,于是乎小编就想着做一次消息中间件的专题,归类整理了 MQ(ActiveMQ/RabbitMQ/RocketMQ)+Kafka 等的纯手绘知识体系图、面试以及相关的学习笔记。



  • 基础知识点(很重要)

  • 屏幕适配攻略

正文

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. 分辨率

比如:1920*1080 分辨率,表示当前设备的屏幕是由 横向 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(只是举个例子,数值不必认真).因此,在用户调整字体的情况下,同样的布局,可能出现 窗口大小不变,但是文字尺寸发生变化的情况。

屏幕适配攻略

最后

关于面试刷题也是有方法可言的,建议最好是按照专题来进行,然后由基础到高级,由浅入深来,效果会更好。当然,这些内容我也全部整理在一份 pdf 文档内,分成了以下几大专题:


  • Java 基础部分



  • 算法与编程



  • 数据库部分



  • 流行的框架与新技术(Spring+SpringCloud+SpringCloudAlibaba)



这份面试文档当然不止这些内容,实际上像 JVM、设计模式、ZK、MQ、数据结构等其他部分的面试内容均有涉及,因为文章篇幅,就不全部在这里阐述了。


作为一名程序员,阶段性的学习是必不可少的,而且需要保持一定的持续性,这次在这个阶段内,我对一些重点的知识点进行了系统的复习,一方面巩固了自己的基础,另一方面也提升了自己的知识广度和深度。


最后提醒一下哦,如果你想要学习,却无奈于没有干货学习资料,以上所有的资料内容都可以免费分享给你,只需你多多支持一下即可


“点赞文章,关注我,然后戳戳戳戳这里获取免费下载方式”

用户头像

还未添加个人签名 2021.07.29 加入

还未添加个人简介

评论

发布
暂无评论
2021Java面经:Android屏幕适配-重点盘点