1、Android设备屏幕尺寸分布

首先看一下各种屏幕的尺寸和屏幕密度划分,下图是各种屏幕尺寸相应的范围:

从上图能够看出。相应normal尺寸的屏幕范围集中在常见的3到5寸屏之间。large尺寸相应的就主要是5到7寸的nottpad之类的设备。比如三星的Note和Nexus7平板等,再网上走就是平板电脑了。接下来是屏幕密度(dpi),须要说明的时,平时所说的屏幕分辨率事实上不能作为屏幕适配的根据,应该根据屏幕密度和屏幕尺寸来换算,屏幕密度是指每寸屏幕内容纳的像素数,屏幕密度从ldpi到xhdpi分别相应为120dpi、160dpi、240dpi、320dpi,屏幕密度越高、分辨率越高、屏幕尺寸越小就产生了视网膜屏幕。

在屏幕适配中。Google推荐针对mdpi(160dpi)进行设计。然后依照比例进行缩放,这样的方法主要针对位图(某些不规则图片,无法拉伸的图片,其它建议使用.9图)。以mdpi作为baseline,并以3:4:6:8的比例缩放:

2、Android资源文件

drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854)

drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)

drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)

3、Android上常见度量单位

px(像素):屏幕上的点,绝对长度。与硬件相关。

in(英寸):长度单位。

mm(毫米):长度单位。

pt(磅):1/72英寸,point。

dp(与密度无关的像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上。1dp = 1px。

dip:Density-independent pixel,同dp同样。

sp:在dp的基础上,还与比例无关。个人理解为是一个矢量图形单位。

在xml中定义大小,建议TextView使用sp。其它使用dp

相应关系

Android手机屏幕标准       相应图标尺寸标准   屏幕密度

xhdpi               1280*720                               96*96             320

hdpi                 480*800                               72*72             240

mdpi                480*320                               48*48             160

ldpi                  320*240                                36*36             120

模拟器上不同分辨率全部相应的信息: 



QVGA : {density=0.75, width=240, height=320, scaledDensity=0.75, xdpi=120.0, ydpi=120.0}

HVGA :  {density=1.0, width=320, height=480, scaledDensity=1.0, xdpi=160.0, ydpi=160.0}

WVGA : {density=1.5, width=480, height=800, scaledDensity=1.5, xdpi=240.0, ydpi=240.0}

当中。density为显示的逻辑分辨率;width及height就为屏幕分辨率(为绝对宽度与高度),与fields中的widthPixels及 heightPixels一致;scaleDensity与density一致;xdpi及ydpi为x方向与y方向的像素密度。

4、怎样计算密度(dpi)

1.标准是240*320画在1.5*2平方inch上。那么像每平方英寸有240*320/(1.5*2)=25600点,也就是一平方英寸的像素点为25600,所以dpi取为它的平方根160;假设你的dpi是120,那么它的密度就是0.75.

2. 密度不仅仅是与width有关。还与height有关,所以无论width是1.8还是1.3,它的密度都有可能是1;比方width是1.8。仅仅要它的 height是3/1.8的话,假设pixel为240*320的话,它的密度仍旧是1;相同假设width为1.3,仅仅要它的 height为3/1.3的话,像素点为240*320,则密度也是1.

3.320*480/(1.5*2)得到单位平方英寸的点为51200,所以单位平方英寸是240*320画在1.5*2屏幕的2倍。可是这是平方英寸啊,算密度的时候要开平方的啊,所以应该是2开平方,是1.414吧。大致密度为1.5。

5、px与dip的关系

Android中。在160dpi (mdpi)中, 1 dip= 1 px;

以此类推,在120dpi(ldpi)中, 1 dip = 0.75px;

在240dpi (hdpi)中,  1 dip = 1.5px;

在320dpi(xhdpi)中, 1dip = 2px。

6、怎样做到与密度无关

  假设屏幕密度为160,这时dp和sp和px是一样的。

1dp=1sp=1px,但假设使用px作单位,假设屏幕大小不变(假设还是3.2寸)。而屏 幕密度变成了320。那么原来TextView的宽度设成160px,在密度为320的3.2 寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但假设设置成160dp或160sp的话。

系统会自己主动将width属性值设置成320px的。

也就是160 * 320 / 160。

当中320 / 160可称为密度比例因子。也就是说。假设使用dp和sp。系统会依据屏幕密度的变化自己主动进行转换。

官方文档总结的计算公式为:pixels
= dps * (density /160).

使用dip作为View的单位。这样就能够同一时候兼容各种不同的分辨率。不会造成UI的不可兼容。

android UI设计时须要注意遵循的设计原则的更多相关文章

  1. 优化技术之Android UI优化

    2013-06-30 UI 优化 在Android中,最常用LinearLayout表示UI的布局.比起LinearLayout,在资源利用上,RelativeLayout会占用更少的资源而达到相同的 ...

  2. Android UI设计规则

    Android UI技巧 1.1 不该做什么 l  不要照搬你在其他平台的UI设计,应该让用户使用感觉是在真正使用一个Android软件,在你的LOGO显示和平台总体观感之间做好平衡 l  不要过度使 ...

  3. 详解 “Android UI”设计官方教程

    我们曾经给大家一个<MeeGo移动终端设备开发UI设计基础教程>,同时很多朋友都在寻找Android UI开发的教程,我们从Android的官方开发者博客找了一份幻灯片,介绍了一些Andr ...

  4. 【Android UI设计与开发】第05期:引导界面(五)实现应用程序只启动一次引导界面

    [Android UI设计与开发]第05期:引导界面(五)实现应用程序只启动一次引导界面 jingqing 发表于 2013-7-11 14:42:02 浏览(229501) 这篇文章算是对整个引导界 ...

  5. 移动周报:十款最实用的Android UI设计工具

    上一周可以说是一个不断Mark周,从最实用的Android UI设计工具.免费移动应用测试框架推荐,到HTML5开发框架等等,各种开发工具.框架精彩丰呈,看得小伙伴们是不亦乐乎.当然,还有不容错过的M ...

  6. 【转】【Android UI设计与开发】之详解ActionBar的使用,androidactionbar

    原文网址:http://www.bkjia.com/Androidjc/895966.html [Android UI设计与开发]之详解ActionBar的使用,androidactionbar 详解 ...

  7. Android UI设计

    Android UI设计--PopupWindow显示位置设置 摘要: 当点击某个按钮并弹出PopupWindow时,PopupWindow左下角默认与按钮对齐,但是如果PopupWindow是下图的 ...

  8. android ui界面设计参数讲解

    百度文库: http://wenku.baidu.com/link?url=s66Hw6byBEzmjL77doYL1YQN4Y_39F7MovaHKs5mVGrzTDOQCAmiM-1N_6Cdm- ...

  9. Android UI 设计准则

    Design Principles  设计准则 These design principles were developed by and for the Android User Experienc ...

随机推荐

  1. 11个实用经典的SQL小贴士

    学习工作之余,在没有要解决问题的压力之下,还是建议系统的看看书,对于一些认为没啥用的知识点,也建议去仔细的看看,练练手,说不定什么时候就用到了,到时也好有针对性的去查,不至于盲目的按照自己的思路,重复 ...

  2. seo技巧-2015/10/05

    1.每页都要有它自己的文件名,并且有它自己的上级文件夹和它自己相关关键字. 2.建议在每页上使用一个的H1标签.我也试着使用许多H2 或H3的标签在页面内辅助构成正文内容. 3. 有时花费一点钱帮助你 ...

  3. 组建你自己的Theme,组件你的Style

    Andorid-Style,组建你自己的Theme,组件你的Style 前言: 今天,尝试了一个新的Demo,也尝试深入学习,话不多说,看一下,这个Demo如何实现的自定义主题与组件Style是如何绑 ...

  4. leetcode—jump game

    1.题目描述 Given an array of non-negative integers, you are initially positioned at the first index of t ...

  5. Ios下解决libzbar.a不支持armv7s的方法

    解决 libzbar.a' for architecture armv7 的问题 下载最新的zbar源码 http://sourceforge.net/p/zbar/code/ci/default/t ...

  6. mongodb使用中遇到的问题汇总

    1. 每次重新打开mongo,都会显示:forked process:xxxx ,然后用 find -name mongod.lock 进行搜索,发现在 ./var/lib/mongodb/ 目录下又 ...

  7. collectionView/tableview刷新时关闭动画无效

    collectionView/tableview reloadSections/reloaddata时去掉动画无效时可以尝试使用 [UIView performWithoutAnimation:^{ ...

  8. URAL-1997 Those are not the droids you're looking for 二分匹配

    题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1997 题意:记录了n个人进出门的时间点,每个人在房子里面待的时间要么小于等于a,要么大于 ...

  9. pku3277 City Horizon

    http://poj.org/problem?id=3277 线段树,离散化,成段更新 #include <stdio.h> #include <stdlib.h> #defi ...

  10. c#装B指南

    要想让自己的代码,看起来更优雅,更有逼格,更高大上,就一定要写出晦涩难懂,而又简洁的代码来. 对于类自身的全局变量,一定要加this,对于基类的,一定要加base.反射不要多,但一定要有,而且偶尔就来 ...