Android一些尺寸单位的基础概念描述

屏幕尺寸:单位英寸,屏幕对角线的物理尺寸。

dp:官方是根据320480为基准指定dp值,即dpi160下,1dp=1px,在dpi320下即分辨率7201080下,1dp=2px。所以使用dp作为长度单位,可以保证在不同屏幕像素密度的手机上显示很相似的效果

px(像素点):就是手机屏幕最小构成单元,例如1080*1920即宽度上面有1080个像素点,高度上面有1920个像素点。

dpi(像素密度):一平方英寸面积内,存在多少个像素点

屏幕尺寸、分辨率和像素密度三者的关系:像素密度,可以由屏幕尺寸和分辨率计算得出

像素密度计算方法

例如:

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 不再是占屏幕宽的一半,而是略微超过。

独立比例像素 (sp)

全英文为: scale-independent pixel (简称sp或者sip)

专门用于字体大小表示。

推荐使用12sp以上的偶数作为 字体大小, 不要使用奇数,或者浮点型小数,因为容易造成精度丢失。

Q: sp和dp有什么区别?

A: 通常情况下,dp和sp效果类似,但是有一点,如果用户 调整了手机字体,比如 从标准,变成了 超大,那么,1dp 原本等于1px依然不变,但是1sp就会从1px变成3px(只是举个例子,数值不必认真).

因此,在用户调整字体的情况下,同样的布局,可能出现 窗口大小不变,但是文字尺寸发生变化的情况。

怎么做好屏幕适配

使用多套布局适应不同屏幕。此方法必须要了解 布局限定符的概念。

限定符: 在原本的layout后面加上横杠,然后加上限定名。形成 layout-XXX的形式,具体规则请参考谷歌官网: https://developer.android.google.cn/training/multiscreen/screensizes, 重点摘录如下:

使用上面的限定符,几乎可以解决所有的适配问题,但是另外还有一个小技巧帮我们节省工作量 :布局别名.

适用情形为:当多个加了限定符的 layout.xml中都引用了同一个 子布局,而子布局的内容可能相同,也可能不同。

这个时候,使用布局别名,可以节省操作量。

布局别名

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

2 代码适配

我们通过java代码去获取屏幕的宽高,动态去指定控件的宽高 。

获取屏幕宽高的方式我不想在这里占篇幅,读者可自行百度或者看看这一篇文章,他写得比较到位 https://www.jianshu.com/p/1a931d943fb4 .

代码适配,一般用于动态创建 控件,或者自定义view自己绘制图形的时候。

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

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

布局组件的适配

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

包含如下手段:

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

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

使用线性布局时,多实用weight权重属性,可按百分比分配指定长度

多使用 wrap_content match_parent 以及线性布局的权重

多用 minWidth minHeight,lines 等属性

设计图片适配

图片切图最好以720*1080为基准设计一套图就可以了,这个尺寸兼顾了美观性、经济性和计算的简单。美观性是 指,以这个尺寸做出来的应用,在720×1280中显示完美,在1080×1920中看起来也比较清晰;经济性是指,这个分辨率下导出的图片尺寸适中,内存消耗不会过高,并且图片文件大小适中,安装包也不会过大;计算的简单,就是1dp=2px,好计算。

屏幕尺寸

可能面试点

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

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

结语

屏幕适配,工作中并不困难,但是面试多会问到。

现今主流的两种完美适配方案,有头条方案(直接变更DisplayMetrics中的density),以及 多套dimens适配方案,两者各有千秋。

参考https://www.jianshu.com/p/ec5a1a30694b

https://www.jianshu.com/p/72e6e1e83b96

android做好屏幕适配,android屏幕适配相关推荐

  1. android ui布局适配,Android适配全面总结(一)----屏幕适配

    前言 Android适配是一个老生常谈的问题,很多程序员觉得很恶心,不愿意做适配,但是又不得不做.然后老板说,这位兄弟,做好了,今天晚饭给你加个鸡腿,然后程序员开始找各种资料,忙活起来了,最终在苦逼的 ...

  2. android 适配2k屏幕分辨率,Android设备兼容处理(二):屏幕适配

    前言 要做好屏幕适配最重要的是了解当前市场设备分布,目前主流设备可以分为三类,4.7-5.5英寸的中屏手机,5.5-7.0的大屏手机,以及7.0英寸以上的平板.分辨率则是720P,1080P和2K. ...

  3. 【Android 应用开发】Android屏幕适配解析 - 详解像素,设备独立像素,归一化密度,精确密度及各种资源对应的尺寸密度分辨率适配问题

    . 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19698511 . 最近遇到了一系列的屏幕适配问题, 以及 ...

  4. android wm 改变大小,Android 屏幕适配经验总结

    本文记录一些适配问题的研究,基础概念不做过多介绍. Android在做屏幕适配的时候一般考虑两个因素:分辨率和dpi.分辨率是屏幕在横向.纵向上的像素点数总和,一般用"宽x高"的形 ...

  5. android 屏幕分辨率 屏幕密度,Android屏幕适配——多分辨率多屏幕密度

    为什么要适配,适配的好处等等这里就不说了,直接说我们要怎么适配,请看下面的内容. 1.重要概念 px:pixel,像素Android原生API,UI设计计量单位,如获取屏幕宽高. 屏幕分辨率:指在纵向 ...

  6. Android获取屏幕尺寸,屏幕适配

    获取屏幕尺寸: DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics( ...

  7. 面试时Android屏幕适配,Android—屏幕适配(面试技巧)

    1.明白如下几个概念: 屏幕尺寸,屏幕分辨率以及屏幕像素密度. <1>屏幕尺寸:指的是屏幕对角线的长度.以手机为例,常见的有4.2.5.0.5.5等.. <2>屏幕分辨率:指横 ...

  8. android大屏适配_Android屏幕适配

    Android屏幕适配 2020-04-20 09:07:33  By: 琛恋柏 随着安卓手机的样式越来越多,屏幕的大小也不一致,分辨率大小也多规格化,所以在开发中就遇到很多关于屏幕适配的问题,当然前 ...

  9. android手机分辨率适配,Android屏幕适配(一)

    为什么要屏幕适配 由于Android系统的开放性,任何用户.开发者.OEM厂商.运营商都可以对Android进行定制,于是导致运行 Android 的设备多种多样,它们有着不同的屏幕尺寸和像素密度. ...

  10. android 主流屏幕比例,Android 主流屏幕以及适配

    一.Android版本比例测试:(数据来源:腾讯优测) 较主流的系统版本:部分旗舰机可以适配android7.0:目前大部分手机为6.0,比如各大厂商的旗舰机,其余大部分为android5.0,一般可 ...

最新文章

  1. UE商城资源 Kitsune狐狸女孩
  2. 安装Docker:解决container-selinux = 2.9问题
  3. C# winform 后台控制删除动态生成的控件
  4. JPA_@Table 注解详解
  5. Java提取mssql备份文件的数据
  6. SQL 触发器的使用
  7. 嵌入式linux tftp服务的配置
  8. 开源项目中经常出现的七种错误
  9. matlab 读取文件夹底下所有txt文件
  10. java 格式化时间计算
  11. Linux中的特殊权限——粘滞位(Stickybit)
  12. 云计算对21世纪IT人的挑战
  13. [数据分析与可视化] 科技论文配色心得
  14. 计算机大学生三年计划,大学三年规划2000字.doc
  15. 微信小程序进度条样式_微信小程序——自定义圆形进度条
  16. 比越南妹划算 1元团购美女
  17. 集合(Collections)
  18. Javaweb开发了解前端知识七、Servlet(一)
  19. 大疆Tello UDP控制协议接口
  20. PCS (物理编码子层)

热门文章

  1. 网页的重绘与重排以及重构
  2. RAM和ROM的区别
  3. setTimeout与setTimeinterval的使用-2020年10月23日
  4. JavaScript计时器的用法setTimeout()和setInterval()
  5. mikrotik CAPsMAN设置教程
  6. Linux 基础IO
  7. 鬼门关、黄泉路、彼岸花、忘川河、奈何桥、孟婆汤、三生石
  8. linux查看文件创建人,Linux中如何查看文件的创建时间详解
  9. java以下声明变量中 是不合法的_Java考试题(一)
  10. js实现tab选项卡