• Android开发屏幕适配知识点


    1、了解几个概念

    (1)分辨率。

    分辨率就是手机屏幕的像素点数。一般描写叙述成屏幕的“宽×高”,安卓手机屏幕常见的分辨率有480×800、720×1280、1080×1920等。720×1280表示此屏幕在宽度方向有720个像素,在高度方向有1280个像素。

    (2)屏幕大小。

    屏幕大小是手机对角线的物理尺寸。以英寸(inch)为单位。比方某某手机为“5寸大屏手机”,就是指对角线的尺寸,5寸×2.54厘米/寸=12.7厘米。

    (3)密度(dpi,dots per inch。或PPI。pixels per inch)。从英文顾名思义。就是每英寸的像素点数。数值越高当然显示越细腻。假如我们知道一部手机的分辨率是1080×1920,屏幕大小是5英寸,你是否能算出此屏幕的密度呢?哈哈,中学的勾股定理派上用场啦!

    通过宽1080和高1920,依据勾股定理。我们得出对角线的像素数大约是2203。那么用2203除以5就是此屏幕的密度了。计算结果是440。440dpi的屏幕已经相当细腻了。


    2、实际密度与系统密度

    尚未发现他处使用“实际密度”和“系统密度”这两个词汇。临时由我如此定义吧。

    “实际密度”就是我们自己算出来的密度,这个密度代表了屏幕真实的细腻程度。如上述样例中的440dpi就是实际密度。说明这块屏幕每寸有440个像素。5英寸1080×1920的屏幕密度是440。而同样分辨率的4.5英寸屏幕密度是490。如此看来,屏幕密度将会出现非常多数值,呈现严重的碎片化。而密度又是安卓屏幕将界面进行缩放显示的根据,那么安卓是怎样适配这么多屏幕的呢?

    事实上,每部安卓手机屏幕都有一个初始的固定密度,这些数值是120、160、240、320、480,我们权且称为“系统密度”。

    大家发现规律没有?相隔数值之间是2倍的关系。普通情况下。240×320的屏幕是低密度120dpi,即ldpi。320×480的屏幕是中密度160dpi,即mdpi。480×800的屏幕是高密度240dpi,即hdpi;720×1280的屏幕是超高密度320dpi。即xhdpi;1080×1920的屏幕是超超高密度480dpi,即xxhdpi。

    安卓对界面元素进行缩放的比例根据正是系统密度,而不是实际密度。




    3、一个重要的单位dp

    dp也可写为dip,即density-independent pixel。你能够想象dp更类似一个物理尺寸,比方一张宽和高均为100dp的图片在320×480和480×800的手机上“看起来”一样大。而实际上,它们的像素值并不一样。

    dp正是这样一个尺寸,无论这个屏幕的密度是多少,屏幕上同样dp大小的元素看起来始终几乎相同大。

    另外,文字尺寸使用sp。即scale-independentpixel的缩写,这样,当你在系统设置里调节字号大小时。应用中的文字也会随之变大变小。



    4、dp与px的转换

    在安卓中,系统密度为160dpi的中密度手机屏幕为基准屏幕,即320×480的手机屏幕。在这个屏幕中。1dp=1px。

    100dp在320×480(mdpi,160dpi)中是100px。那么100dp在480×800(hdpi。240dpi)的手机上是多少px呢?我们知道100dp在两个手机上看起来几乎相同大,依据160与240的比例关系,我们能够知道,在480×800中。100dp实际覆盖了150px。因此,假设你为mdpi手机提供了一张100px的图片。这张图片在hdpi手机上就会拉伸至150px,可是他们都是100dp。

    中密度和高密度的缩放比例似乎能够不通过160dpi和240dpi计算。而通过320px和480px也能够算出。可是依照宽度计算缩放比例不适用于超高密度xhdpi和超超高密度xxhdpi了。

    即720×1280中1dp是多少px呢?假设用720/320,你会得出1dp=2.25px,实际这样算出来是不正确的。

    dp与px的换算要以系统密度为准。720×1280的系统密度为320。320×480的系统密度为160。320/160=2,那么在720×1280中,1dp=2px。同理,在1080×1920中。1dp=3px。

    大家能够记住以下这个比例。dp与px的换算就十分easy啦!

    ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12,我们发现。相隔数字之间还是2倍的关系。计算的时候。以mdpi为基准。比方在720×1280(xhdpi)中。1dp等于多少px呢?mdpi是4。xhdpi是8。2倍的关系。即1dp=2px。反着计算更重要,比方你用PhotoShop在720×1280的画布中制作了界面效果图,两个元素的间距是20px。那要标注多少dp呢?2倍的关系,那就是10dp。



    当安卓系统字号设为“普通”时。sp与px的尺寸换算和dp与px是一样的。比方某个文字大小在720×1280的PS画布中是24px,那么告诉project师,这个文字大小是12sp。


    5、建议在xdhpi中作图

    安卓手机有这么多屏幕,我究竟根据哪种屏幕作图呢?没有必要为不同密度的手机都提供一套素材,大部分情况下。一套就够了。

    如今手机比較高的分辨率是1080×1920,你能够选择这个尺寸作图,可是图片素材将会增大应用安装包的大小。

    而且尺寸越大的图片占用的内存也就越高。

    假设你不是设计ROM,而是做一款应用。我建议大家用PS在720×1280的画布中作图。这个尺寸兼顾了美观性、经济性和计算的简单。

    美观性是指,以这个尺寸做出来的应用,在720×1280中显示完美。在1080×1920中看起来也比較清晰;经济性是指,这个分辨率下导出的图片尺寸适中,内存消耗不会过高。而且图片文件大小适中,安装包也不会过大。计算的简单。就是1dp=2px啊,多好计算啊。

    做出来的图片,记着让界面project师放进drawable-xhdpi的资源目录中。


    6、屏幕的宽高差异

    在720×1280中作图,要考虑向下兼容不同的屏幕。通过计算我们能够知道,320×480和480×800的屏幕宽度都是320dp,而720×1280和1080×1920的屏幕宽度都是360dp。

    它们之间有40dp的差距,这40dp在设计中影响还是非常大的。

    例如以下图蝴蝶图片距离屏幕的左右边距在320dp宽的屏幕和360dp宽的屏幕中就不一样。




    不仅宽度上有差异。高度上的差异更加明显。对于天气等工具类应用。因为界面通常是独占式的,更要考虑屏幕之间的比例差异。




    假设想消除这些比例差异,能够通过加入布局文件来实现。普通情况下,布局文件放在layout目录中。假设要单独对360dp的屏幕进行调整。你能够单做做一个布局文件放在layout-w360dp中。只是,最好是默认针对360dp的屏幕布局(较为主流),然后对320dp的屏幕单独布局。将布局文件放到layout-w320dp中;假设你想对某个特殊的分辨率进行调整。那么你能够将布局文件放在标有分辨率的目录中。如layout-854×480。


    7、几个资源的目录

    在720×1280中做了图片。要让开发者放到drawable-xhdpi的资源目录中,这样才干够显示正确。个人觉得仅提供一套素材就能够了。能够測试一下应用在低端手机上执行是否流畅。假设比較卡顿,能够依据须要提供部分mdpi的图片素材,由于xhdpi中的图片执行在mdpi的手机上会比較占内存。

    以应用图标为例,xhdpi中的图标大小是96px。假设要单独给mdpi提供图标。那么这个图标大小是48px,放到drawable-mdpi的资源目录中。

    各个资源目录中的图片尺寸相同符合ldpi:mdpi:hdpi:xhdpi:xxhdpi=3:4:6:8:12的规律。


    假设你把一个高2px的切割线素材做成了9.png图片。你想让细线在不同密度中都是2px。而不被安卓依据密度进行缩放。怎么办?你能够把这个切割线素材放到drawable-nodpi中,这个资源目录中的图片,将依照实际像素大小进行显示,而不会被安卓依据密度进行缩放。即在mdpi中细线是2px(2dp),在xhdpi中细线是2px(1dp)。


    以上是对安卓屏幕的初步总结。不知道你看完后是豁然开朗。还是一头雾水?这篇文章主要为了有用起见,避开了过多深入的分析,假设你还有什么疑问。能够留言。


    ----------------------------------------------------------


    最后补充一下,不少朋友问我安卓平板的设计,提到最多的是1280×800的分辨率。这个分辨率的平板通常是10.1寸的中密度屏幕。直接在PS中建立1280×800的画布,提取之后的素材让开发放到drawable-mdpi中就可以。而且中密度的平板中,1dp=1px,比較好换算单位。

    转自:http://www.zcool.com.cn/article/ZNjI3NDQ=.html

  • 相关阅读:
    Proj THUDBFuzz Paper Reading: The Art, Science, and Engineering of Fuzzing: A Survey
    Proj THUDBFuzz Paper Reading: A systematic review of fuzzing based on machine learning techniques
    9.3 付费代理的使用
    11.1 Charles 的使用
    第十一章 APP 的爬取
    10.2 Cookies 池的搭建
    10.1 模拟登录并爬取 GitHub
    11.5 Appium 爬取微信朋友圈
    11.4 Appium 的基本使用
    11.3 mitmdump 爬取 “得到” App 电子书信息
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7126677.html
Copyright © 2020-2023  润新知