zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ansible命令应用示例
    ansible运维自动化工具
    grep 命令使用指南
    Nginx httpS server配置
    find 使用指南
    fastcgi_param 详解
    nginx虚拟主机的配置
    shell中字体变色
    nginx.conf 配置文件详解
    php-fpm.conf 配置文件详解
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7126677.html
Copyright © 2011-2022 走看看