`
fantaxy025025
  • 浏览: 1328232 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Android多分辨率适配-长度单位和转换计算-多分辨率适配

 
阅读更多

 

相对习惯web的px,手机上面的屏幕适配和长度单位都比较多。

以前也没有仔细留意这些,我自己的手机是多少从没有关心过。

这回做一个全面的调查,一般目标都是达到 实用导向的 专家级别。

 

使用的单位:

    在Android应用的开发过程中,我们往往需要设置组件,字体等尺寸,这个时候就需要制定计量单位。在Android中使用到的计量单位主要有px, pt, dp, dip, sp等,这些计量单位表示什么尺寸,之间有何区别?

 

px  :像素 

in  :英寸 inch
mm  :毫米 
pt  :磅,1/72 英寸 
dp  :(dip, Desity-independent pixel):密度无关像素,一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px 

dip :dpi(dots per inch),即像素密度,每英寸面积上存在多少个像素。 

sp  :(与刻度无关的像素),与dp类似,但是可以根据用户的字体大小首选项进行缩放。建议sp作为文本的单位

 

基本概念 

 

 

屏幕大小:以屏幕对角线的物理长度来衡量屏幕的大小 

分辨率:屏幕中所有物理像素点数。如320x480,就表示宽方向有320个像素,高方向有480个像素,整个屏幕有153,600个像素。

屏幕密度:dpi(dots per inch),即像素密度,每英寸面积上存在多少个像素。160dpi表示单位面积上有160个像素,240dpi表示单位面积上有240个像素。 屏幕的密度是由分辨率和屏幕大小(物理尺寸)决定的,320x480的分辨率在3寸的屏幕上与6寸的屏幕上密度是不同的。 

dp(dip, Desity-independent pixel):密度无关像素,在Android中经常使用。android将160dp作为一个标准(即单位面积上有160个像素点时),此时1dp=1px;当将1dp放到240dp的屏幕上去时,android就会自动将1dp调整为1.5px的大小。而在美工给出的高保真一般是px,要根据给出的高保真的密度,换算到dp, 公式:

px = dp * (dpi / 160)

android将所有的密度泛化为:ldpi, mdpi, hdpi。

将屏幕大小泛化为small, normal, large, xlarge(extra large)。

 

 

实际的例子:

华为荣耀4核的参数如下(from jd):

 

华为手机:

 

屏幕尺寸4.5英寸

分辨率1280×720 HD高清,326PPI

 

 

(看看,这里用的326PPI其实就是pdi,Pix Per Inch -- ppi,google居然这么写Dots Per Inch -- dpi)

 

 

一般手机就只说屏幕的尺寸,即对角线的英寸数值,不说屏幕的长和宽。

如果我能知道场合宽的比例,即根据 长*宽=面积( l*w=s ),可以算出来长和宽。

长和宽的比例,其实手机的参数也写明了:

  分辨率1280×720

根据这个也可以看出来长宽比(因为像素是等大小的,根据等比例可以推知:长宽的像素个数比即长宽比)

 

 

我又查了查业界的大概情况:能手机的屏幕一般的长宽比例是多少呢?

 

一般有16:9和16:10两种。
16:9比如LG 2X、LG LTE等,分辨率为800*480、1280*720等;
16:10比如iphone4、iphone4S、魅族M9、魅族MX等,分辨率为960*540。
我用的是16:9的LG LTE,这种比例好处是看电影比较好,一般的16:9电影可以满屏全比例播放;缺点就是没有16:10的手机看上去好看,会显得比较长一些。

 

 

知道了长度,长宽比,像素密度,那么,来算算pdi==ppi

 

屏幕尺寸4.5英寸

分辨率1280×720 HD高清

 

怎么计算简单呢?需要去计算屏幕以inch为单位的面积么?

根据等比原则,只要计算对角线的比例既可以了。

分辨率的对角线,(我的脑子还是有点儿问题,居然不能转换ruby的平方到平方根):

 

1.9.3p194 :007 > ( (1280**2) + (720**2) ) ** (1/2.0)  

 => 1468.6047800548656 

对角线的比例,即面积比:

1.9.3p194 :008 > ( (1280**2) + (720**2) ) ** (1/2.0)  / 4.5

 => 326.35661778997013

 

可以看出这里的326PPI 是四舍五入的结果。yea!

即单位inch的面积上有326这么多的像素。

 

实际的计算                                                                                                              

实际开发android中或者cocos2d等游戏的时候就得关注此等计算了。

dp:android将160dp作为一个标准(即单位面积上有160个像素点时),此时作为一个单位比例,即1dp,此时1dp=1px

比如如果用上面的华为手机,则pd设置多少呢?

326.0ppi / (160ppi/pd) = 2.03pd

假设开发时即用单位屏幕的avd开发,则设置为1pd,当放入华为此款手机时,1dp将自动拉升为2.03px

这样的好处:不用改程序了,可以自适应。

 

dp与px换算公式: 

pixs =dips * (densityDpi/160). 
dips=(pixs*160)/densityDpi 

dp与px转换的方法: 

public static int dip2px(Context context, float dipValue){ 
  final float scale = context.getResources().getDisplayMetrics().density; 
  return (int)(dipValue * scale +0.5f); 


public static int px2dip(Context context, float pxValue){ 
  final float scale = context.getResource().getDisplayMetrics().density; 
  return (int)(pxValue / scale +0.5f); 

 

遗留问题:

上面只是解决了自动拉伸,但有时候,拉伸是有问题的,比如一个按钮4角时圆形而不是方形,如果拉伸就会出现问题:角上的边缘线也拉伸了,其实我只想拉伸内部。

解决方法:9妹。

http://www.eoeandroid.com/thread-79604-1-1.html

http://www.eoeandroid.com/thread-79606-1-1.html

 

参考:

http://zhidao.baidu.com/question/370403611.html

http://item.jd.com/755374.html

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

http://l540151663.iteye.com/blog/1512733(不错!!)

Android多分辨率适配 此篇文章很好!!

http://www.uuton.com/post/3f493_22910a(感谢作者!!)

 

 

 

分享到:
评论

相关推荐

    Android多分辨率适配

    总结,Android多分辨率适配是一项复杂但必要的任务,涉及到资源文件的组织、布局设计、像素单位转换等多个方面。通过合理运用上述方法,开发者可以确保应用在各种设备上都能提供良好的用户体验。在实际项目中,还...

    Android 处理HTML-HTML适配屏幕.pdf

    为了实现良好的屏幕适配,开发者需要充分理解Android的屏幕分类和资源管理机制,利用dp单位和比例缩放来设计可扩展的UI,同时配合WebView的特性处理HTML内容。此外,测试是确保适配成功的关键,开发者应该在多种真实...

    Android dp和px/sp等单位相互转换

    在Android开发中,理解并掌握dp、px、sp等单位之间的转换是非常重要的,因为它们直接影响到界面元素在...在设计和编码过程中,要充分利用这些单位和Android提供的工具,确保应用在各种屏幕尺寸和密度上都有良好的表现。

    Android高级应用源码-计算自己手机的屏幕宽高,density值,px 宽高,dp 的宽高,及px 和dp互转的科普.zip

    例如,要将一个20dp的长度转换为像素,可以这样计算: ```java float dpToPx = dpValue * displayMetrics.density; ``` 同样,px 到 dp 的转换为: ```java float pxToDp = dpValue / displayMetrics.density; ``...

    Android 应用的终端适配

    2. **dp(Density-independent Pixel)**:密度独立像素,是Android中的一种长度单位,其值会根据屏幕密度自动转换成相应的物理像素。 3. **sp(Scale-independent Pixel)**:用于文本大小的单位,同样具有密度独立...

    探究Android的多分辨率支持以及各种类型图标尺寸大小.doc

    总之,Android的多分辨率支持和图标尺寸大小管理是其跨设备兼容性的重要组成部分。开发者需了解这些概念,以便创建能在各种Android设备上无缝运行的应用程序。通过正确使用DIP、适应性布局和密度特定的资源,可以...

    5.Android界面编程(2)单位换算与UI适配.ppt

    在Android界面编程中,了解单位换算和UI适配至关重要,因为这直接影响到应用程序在不同设备上的显示效果。本课程主要讲解了pt、px、屏幕尺寸、分辨率和ppi之间的关系,以及Android中的dp和sp单位及其转换。 首先,...

    Android 手机屏幕适配解决办法

    Android 手机屏幕适配是Android开发者面临的关键挑战之一,目标是确保应用界面在不同尺寸和分辨率的设备上保持一致的视觉效果。本文主要探讨如何有效地解决这一问题,包括理解基本概念、布局适配策略、图片适配以及...

    android屏幕适配

    在Android开发中,屏幕适配是一项至关重要的任务,因为Android...- 考虑单列和多列布局的适配。 通过理解和应用这些知识点,开发者能够创建出对各种Android设备具有良好适配性的应用,提升用户体验,降低用户流失率。

    Android屏幕适配

    分辨率虽然对用户来说很重要,但在多屏幕适配时,开发者并不需要直接处理,而是关注屏幕尺寸和密度。 密度无关像素(DP)是Android推荐用于定义UI布局的单位,它是一种虚拟像素单位,能确保在不同密度的屏幕上保持...

    获取屏幕分辨率示例【源代码】

    在Android开发中,获取设备的屏幕分辨率是一项常见的需求,它涉及到UI适配、图像处理以及用户体验优化等多个方面。本示例程序将展示如何利用Android SDK提供的API来获取设备的屏幕尺寸,即宽度和高度。下面我们将...

    android Px,DP转换工具(可选择不同的dpi)

    通过使用这个"Android Px, DP转换工具",开发者可以更加轻松地处理与屏幕尺寸和密度相关的计算,从而优化应用的用户体验。无论是进行UI设计还是编写布局代码,这个工具都将是一个非常实用的助手。

    Android的计量单位px,in,mm,pt,dp,dip,sp

    在Android开发中,理解和使用正确的计量单位对于创建适应各种屏幕尺寸和密度的应用至关重要。以下是对Android中几种主要计量单位的详细解释: 1. **px(像素)**:像素是屏幕的最小显示单位,代表显示器上一个点的...

    android 工程用計算機

    5. **设备兼容性测试**:在不同分辨率和硬件配置的设备上,开发者需要进行计算以确保应用适配并运行良好。 6. **API调用计数**:对于使用有限次调用的API,开发者需要跟踪调用次数,以防止超出限制。 7. **加密与...

    Android屏幕大小和精度

    本文将深入探讨Android设备的多分辨率支持、相关的术语与概念,以及支持的屏幕分辨率范围。 一、多分辨率支持 Android操作系统设计时就考虑到了不同设备的屏幕差异,通过灵活的布局和支持多种分辨率来确保应用能在...

    安卓开发-MultiResolution.zip

    对于字符串、颜色等资源,Android也支持多语言和多分辨率的配置。通过创建`res/values-ldpi`、`res/values-mdpi`等目录,可以在这些目录下覆盖默认的资源,为特定分辨率提供定制化的文本和颜色。 除了资源适配,...

    安卓屏幕适配源码以及相对应资料

    在安卓开发中,屏幕适配是一项至关重要的任务,因为安卓设备有着广泛的屏幕尺寸和分辨率。本文将深入探讨安卓屏幕适配的原理、方法和最佳实践,以帮助开发者创建跨设备一致的用户体验。 首先,理解安卓屏幕的基本...

    安卓分辨率(介绍)

    在安卓系统中,为了更好地适应不同设备的屏幕,系统引入了一系列术语和概念来帮助开发者更好地理解屏幕尺寸、长宽比、分辨率、密度等属性,并据此调整应用布局和资源。屏幕尺寸主要指屏幕的物理尺寸,以对角线长度为...

    Android 刻度尺

    综上所述,"Android 刻度尺"项目涉及到Android UI设计、事件处理、数值计算、适配性优化等多个方面,是一个很好的Android编程实践案例,能够提升开发者对Android平台的理解和技能。通过完成这个项目,开发者不仅可以...

Global site tag (gtag.js) - Google Analytics