Andoid最被人诟病的就是显示屏的各种不同尺寸和不同分辨率。由于Android厂商的纷繁多样,导致出现了不同尺寸和不同分辨率的手机,指示开发者需要兼容各种手机屏幕。本文想学习的就是Android的显示屏幕的各种名词。

打开手机参数,会看到这样的数据

尺寸

尺寸指的是屏幕对角线的长度。以英寸作为度量单位。

分辨率

分辨率指的是在长和宽上各有多少像素。用这个能知道宽高比,一般如果宽高比例是16:9,就是宽屏,4:3就是窄屏了。

我们平时说的VGA,HVGA,QVGA,WVGA,WQVGA是分辨率的概念:

VGA:Video Graphics Array,即:显示绘图矩阵,相当于640×480 像素; 
HVGA:Half-size VGA;即:VGA的一半,分辨率为480×320; 
QVGA:Quarter VGA;即:VGA的四分之一,分辨率为320×240; 
WVGA:Wide Video Graphics Array;即:扩大的VGA,分辨率为800×480像素; 
WQVGA:Wide Quarter VGA;即:扩大的QVGA,分辨率比QVGA高,比VGA低,一般是:400×240,480×272

密度

指的是一英寸有多少像素点。

这里使用的单位有几个:dpi,ppi

ppi和dpi经常被混用,其实ppi才是正确的(pixel per inch),dpi(Dot Per inch)是在打印的时候才用到的。

比如上面那个手机参数中,密度是441ppi,则说明每1平方英寸的屏幕中有441*441个像素。

我们可以稍微做下计算,这个手机屏幕高有1920个像素,密度是441ppi,则高大致有1920/441 = 4.35 英寸,宽有1080/441 = 2.44英寸。那矩形对角线长度(尺寸)5^2 ~ 4.35^2 + 2.44^2

我们可以看到我们的res文件夹中保存的图片信息都是用dpi来做的,比如

drawable-hdpi

drawable-ldpi

drawable-mdpi

drawable-xdpi

hdpi就是高密度,mdpi中等密度,ldpi低密度,xdpi更高密度。

为什么这里要针对不同的密度做不同的资源划分呢?

因为图片大小是以像素来算的,比如一个图片是400*300,就是长宽占的像素。

想象下两个手机有同样的尺寸和宽高比,但是一个是高密度高分辨率的,一个是低密度低分辨率的。那么同样一个图片在高密度的手机上就会显示非常小,在低密度低分辨率手机上就会显示非常大。因此对不同密度设置不同的图片是很有必要的。

密度无关像素

我们一直都是用像素来做基本单位的,但是Android的大小分辨率不一,比如一个320的直线,在240*320的分辨率下正好放,但是在240*640的分辨率下只显示了一半,就是说这个图片展示实际和密度是相关的。因此Android引入了一个密度无关像素的概念。这是一个量词,dp或者叫dip(Density Independent Pixel)。它和像素并不是一一对应的,是有一个换算公式的。比如在160dpi密度的屏幕中(1英寸有160*160个像素),那么dp就和像素是等价的。如果说在320dpi密度的屏幕中,那么一个dp就相当于2个像素了。

使用dp的好处是什么呢?

好处就是如果在开发中,比如一条直线以dp作为单位,那么只要设置一次,就可以适配到多个屏幕了。

首先Android将分辨率与密度绑定起来,做了一个约定

即320*480分辨率的手机,它的密度必须设置为160dpi,那么它在宽上可以展示320个像素,也是320dp。对于480*800分辨率的在3寸到4寸手机呢,它的密度必须是240dpi,那么在宽上可以显示480像素,dp呢?160 / 240 * 480 = 320dp。也是可以显示320dp。所以如果在程序中设置一条直线为320dp,那么在不同分辨率下一样会占满了整个宽。

Android至今还有头疼的图片分辨率的问题就在于px和dp的转换上。我们的资源图片还是以px为单位,在转换成dp的过程中会出现各种问题。比如转换过程中的四舍五入的问题可能会导致图片的显示出现差异等。

参考文章

http://www.cnblogs.com/cmduan/archive/2012/03/09/2388345.html
http://blog.csdn.net/wuyao721/article/details/5286753

http://blog.csdn.net/moruite/article/details/6028547

http://blog.sina.com.cn/s/blog_6499f8f101014ipq.html

==================================
作者:轩脉刃
出处:(http://www.cnblogs.com/yjf512/
版权声明:本文的版权归作者与博客园共有。欢迎转载阅读,转载时须注明本文的详细链接。

Android众说纷纭分辨率的更多相关文章

  1. 关于android的分辨率

    关于Android的分辨率支持,为大家翻译官方文档 看世界杯的空闲时间,翻译一下官方文档.分辨率问题是大家都很关心的(720×480会不会悲剧),而关于这个问题,android官方的文档无疑最有说服力 ...

  2. (13)[Xamarin.Android] 不同分辨率下的图片使用概论

    原文 [Xamarin.Android] 不同分辨率下的图片使用概论 设计Android App的时候,其尺寸众多也是一个挑战之一.要针对不同尺寸设计Android App时,就要先来了一下dpi(d ...

  3. 【cocos2d-x 手游研发小技巧(3)Android界面分辨率适配方案】

    先感叹一下吧~~android的各种分辨率各种适配虐我千百遍,每次新项目我依旧待它如初恋···· 每家公司都有自己项目工程适配的方案,这种东西就是没有最好,只有最适合!!! 这次新项目专项针对andr ...

  4. Android各分辨率定义的图片规格

    我们定义的app图片规格 app图标需要分iphone和android两套 iphone: 名称 Iphone4 Iphone5 手机尺寸 960*640(高*宽) 1136*640 (高*宽) 电池 ...

  5. android 屏幕分辨率 更改

    手头上有一个320x240的LCD.运行android时,显示内容过大,需要更改屏幕的分辨率. 参考链接 http://www.bkjia.com/Androidjc/899396.html http ...

  6. android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配注意事项

    1 Android手机目前常见的分辨率 1.1 手机常见分辨率: 4:3VGA     640*480 (Video Graphics Array)QVGA  320*240 (Quarter VGA ...

  7. android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )屏幕适配

    http://www.tuicool.com/articles/nuyMZb 1 Android手机目前常见的分辨率 1.1 手机常见分辨率: 4:3 VGA     640*480 (Video G ...

  8. Android手机分辨率基础知识(DPI,DIP计算)二

    dp = dip : device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不 ...

  9. Android手机分辨率基础知识(DPI,DIP计算)

    1.术语和概念 概念解释 名词 解释 Px (Pixel像素) 不同设备显示效果相同.这里的“相同”是指像素数不会变,比如指定UI长度是100px,那不管分辨率是多少UI长度都是100px.也正是因为 ...

随机推荐

  1. HDU 1517 A Multiplication Game (SG函数找规律)

    题意:两个玩家玩一个游戏,从 p = 1,开始,然后依次轮流选择一个2 - 9的数乘以 p,问你谁先凑够 p >= n. 析:找规律,我先打了一下SG函数的表,然后就找到规律了 我找到的是: 1 ...

  2. javascript 连等赋值问题

    var a = {n:1}; var b = a; // 持有a,以回查 a.x = a = {n:2}; alert(a.x);// --> undefined alert(b.x);// - ...

  3. chmod用法

    以下是chmod的详细用法:chmod命令用于改变linux系统文件或目录的访问权限.用它控制文件或目录的访问权限.该命令有两种用法.一种是包含字母和操作符表达式的文字设定法:另一种是包含数字的数字设 ...

  4. PHP实现视频文件上传完整实例

    这篇文章主要介绍了PHP实现视频文件上传的技巧,包含了PHP配置信息的设计及大文件的处理,需要的朋友可以参考下    本文以一个完整实例的形式实现了视频文件上传的功能.虽然是比较基础的应用,仍有一定的 ...

  5. AIX 批量更改密码

    使用 chpasswd 可以使用 chpasswd 方便地更改单个或多个账户密码.这意味着不需要像平时一样在命令行上重复输入密码.尽管可以以交互方式使用 chpasswd,但是我建议以非交互方式使用它 ...

  6. 回文(palindrome)

    如果一个字符串忽略标点符号.大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文).

  7. 终端简单使用 &vim编写代码

    vim简单实用 & 用vim编写代码 ##  简单介绍  ## vi 1.c 建立1.c(文件存在,则打开1.c) vi共有三种模式: 按esc进入指令模式 按i进入编辑模式(按i光标位置不变 ...

  8. 从kepware定时取web api内容

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  9. JavaScript相关基础知识点

    JavaScript简介: JavaScript是脚本语言,是一种轻量级的编程语言,是可插入 HTML 页面的编程代码,插入 HTML 页面后,可由所有的现代浏览器执行. JavaScript使用: ...

  10. Leetcod--20. Valid Parentheses(极简洁的括号匹配)

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...