android中的长度单位,dip、dp、px、sp及获取屏幕分辨率和密度

本文主要讲的是android中长度单位(dp、px、sp)的用法。

1、px:pixels(像素)
(1)、不同的设备不同的显示屏显示效果是相同的
(2)、这是绝对像素,是多少就永远是多少不会改变。
一般我们形容屏幕的分辨率,例如分辨率800*480,实际表示改手机屏幕在高度上有800个像素,宽度上有400个像素,整个屏幕就是由800*480个像素点组成。但是由于我们的屏幕大小是不一样的,就会导致同样分辨率在不同尺寸的屏幕上表现不同,同分辨率下,尺寸越小的屏幕上每英寸上分布的像素点就越多,即分辨率越高,屏幕越清晰。

2、dpi:dpi(dots per inch)

表示的是每英尺的点(像素)数
我们平常说的手机屏幕的大小比如4.5英寸,指的是屏幕对角线的长度是4.5英寸,那么我们的dpi的计算公式就是:
dpi(dots per inch)= /size
dpi表示的是每英尺的像素,dpi越高,说明屏幕细粒度越高,也就越清晰了

3、dp:dp(Device Independent pixels)

很简单,和dip是一样的。
dp和px的换算公式:px=dp*(dpi/160)

例:在大小相同的2块屏幕上,假设分辨率分别为480*320、960*640,计算出480*320的dpi为160,假设屏幕上有一个TextView控件,分别设置其长(layout_weight)为160px、160dp,则画出二者的表现。

分析过程:
因为屏幕尺寸相同,分辨率分别为480*320、960*640,其中480*320的dpi为160,则另一块屏的dpi为320,计算结果如下图所示:

当屏幕上有一个TextView控件,分别设置其长(layout_weight)为160px、160dp,则画出二者的表现

原理:
第一块屏幕的dpi是 dpi=160,第二块屏幕的 dpi=320 ,如果套用上面的 dp和px 转化公式就可以得到:
分辨率为480*320的屏幕,这个控件的的 px 为:160px=160dp*(160/160),也就是160px,占了屏幕一半
160dp=160px
160px=160px
分辨率为960*640的屏幕,这个空间的 px 为:320px=160dp*(320/160),也就是320px,也是占了屏幕的一半
160dp=320px
160px=160px
这样我们的应用程序就可以在不同的分辨率上展现的效果相同了。

ps:当要设置控件宽度或者是高度的大小的时候,要使用的单位是 dp ,而不要使用 px。

4、sp:sp(scaled pixels)
sp这个单位通常我们用来设置字体的大小
如果我们改变了系统的字体大小,其控件的显示大小也会跟着发生变化。

5、获取屏幕分辨率和密度

1 DisplayMetrics displayMetrics = new DisplayMetrics();
2 getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
3 System.out.println("width : " + displayMetrics.widthPixels + "   height : " + displayMetrics.heightPixels + "   density : " + displayMetrics.density);

最终在Logcat中我们可以看到width、height、density的值

当density=1,则1dp=1px;

当density=2,则1dp=2px;

当density=3,则1dp=3px;

apk的资源包中,
当屏幕density=240时,即1dp=1.5px,使用hdpi标签的资源
当屏幕density=160时,即1dp=1px,使用mdpi标签的资源
当屏幕density=120时,即1dp=0.75px,使用ldpi标签的资源。

android中的长度单位,dip、dp、px、sp及获取屏幕分辨率和密度

时间: 2024-10-13 20:22:38

android中的长度单位,dip、dp、px、sp及获取屏幕分辨率和密度的相关文章

关于android中的单位(dp、sp)

android让人头疼的适配问题. --------- Android 中的单位大概有这些: 常用的dip.sp,有时候用到px. --------- 介绍两个类: TypedValue:有一些单位转换相关的方法. DisplayMetrics: DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); DisplayMetrics有这些单位转换相关的字段: -

Android度量单位说明(DIP,DP,PX,SP)

(一)概念 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素.px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多.pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用:sp: scaled pixels(放大像素). 主要用于字体显示best for tex

Android开发之dip, dp, px, sp区别

显示单位px和dip以及sp的区别 dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA.HVGA和QVGA 推荐使用这个,不依赖像素. px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多. pt: point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用: sp: scaled pixels(放大像素). 主要用于字

android DisplayMetrics 获取屏幕分辨率

Android 提供DisplayMetircs 类可以很方便的获取分辨率.下面介绍 DisplayMetics 类: Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体. 为了获取DisplayMetrics 成员,首先初始化一个对象如下: DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetri

Android获取屏幕分辨率及DisplayMetrics简介

Android 可设置为随着窗口大小调整缩放比例,但即便如此,手机程序设计人员还是必须知道手机屏幕的边界,以避免缩放造成的布局变形问题. 手机的分辨率信息是手机的一项重要信息,很好的是,Android 已经提供DisplayMetircs 类可以很方便的获取分辨率.下面简要介绍 DisplayMetics 类: Andorid.util 包下的DisplayMetrics 类提供了一种关于显示的通用信息,如显示大小,分辨率和字体. 为了获取DisplayMetrics 成员,首先初始化一个对象如

[转]Android中dp,px,sp概念梳理以及如何做到屏幕适配

http://blog.csdn.net/jiangwei0910410003/article/details/40509571 今天又开始我的App开发,因为之前一直做的是SDK,所以涉及到界面UI很少,刚开始做Android应用的时候,没有对dp,px,sp等概念有一个深入的了解,只知道他们之间的转化,还有写个转换工具类等.做Android已经有一年多了,现在再次开始App开发,决定没遇到一个概念,必须得弄透彻.好吧,下面进入主题吧: 首先来看一下他们的基本概念: px   :是屏幕的像素点

Android中dp,px,sp概念梳理

今天又开始我的App开发,因为之前一直做的是SDK,所以涉及到界面UI很少,刚开始做Android应用的时候,没有对dp,px,sp等概念有一个深入的了解,只知道他们之间的转化,还有写个转换工具类等.做Android已经有一年多了,现在再次开始App开发,决定没遇到一个概念,必须得弄透彻.好吧,下面进入主题吧: 首先来看一下他们的基本概念: px   :是屏幕的像素点dp   :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1pxdip  :等同于dpsp   :同dp相

Android 获取屏幕尺寸与密度

android中获取屏幕的长于宽,参考了网上有很多代码,但结果与实际不符,如我的手机是i9000,屏幕大小是480*800px,得到的结果却为320*533 结果很不靠谱,于是自己写了几行代码,亲测一下 测试参数: 测试环境: i9000(三星) 物理屏幕:480*800px density :1.5 测试代码: [java] view plaincopyprint? // 获取屏幕密度(方法1) int screenWidth  = getWindowManager().getDefaultD

【转】Android中的长度单位详解(dp,sp,px,in,pt,mm)

原帖地址:http://blog.csdn.net/nokiaguy/article/details/5509638 原帖作者:geekguy 看到有很多网友不太理解dp.sp和px的区别:现在这里介绍一下dp和sp.dp也就是dip.这个和sp基本类似.如果设置表示长度.高度等属性时可以使用dp 或sp.但如果设置字体,需要使用sp.dp是与密度无关,sp除了与密度无关外,还与scale无关.如果屏幕密度为160,这时dp和sp和px是一 样的.1dp=1sp=1px,但如果使用px作单位,如