博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android应用开发之View的大小计量单位(px、dpi、dp、dip、sp)
阅读量:6948 次
发布时间:2019-06-27

本文共 1615 字,大约阅读时间需要 5 分钟。

http://blog.csdn.net/ljianhui/article/details/43601495?ref=myread

一、像素(px)与屏幕分辨率

1)px(Pixels ,像素):对应屏幕上的实际像素点。例如,320*480的屏幕在横向有320个象素,在纵向有480个象素。 

2)屏幕分辨率就是在屏幕上显示的物理像素总和,它等于屏幕的宽度上的像素*高度上的像素。在应用程序的开发上,不会使用屏幕分辨率。

3)屏幕分辨率虽然是宽*高,但是它与屏幕的大小没有关系,它与一个屏幕的像素的数量相关。

 

二、dpi

1)dpi:像素每英寸,是屏幕像素(px)密度的单位。像素密度就是屏幕指定物理宽高范围内能显示的像素的数量。

2)在android中,dpi有如下分类,ldpi,mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi

3)在现实中,通常以mdpi为一个基准,它表示160dpi,并将此密度定义为1个密度的单位。160dpi表示在1平方英寸的面积内有160*160个像素点。ldpi则为120dpi,hdpi则为240dpi,xhdpi则为320dpi,xxhdpi则为480dpi,xxxhdpi则为640dpi,也就是说ldpi的密度为0.75,hdpi的密度为为1.5,xhdpi则为2,xxdpi则为3,xxxhdpi则为4

4)dpi跟屏幕的大小无关,它只是像素密度的一个量度。

 

三、dp

独立于物理密度的量度单位,它以160dpi为基准,无论在哪种dpi的屏幕下,1dp表示的物理长度都是一样的。在160dpi的屏幕下,1dp=1px,即一个dp需要用一个px来表示,在240dpi的屏幕下,1dp=1.5px,表示一个dp需要1.5个px来表示。也就是说1dp=dpi/160*px。它的意义在于可以让开发人员开发出无论在哪种dpi的屏蔽下显示大小都相同的UI。也就是说在相同尺寸、但不同的分辨率的手机上,用dp标识的东西,显示的大小是一样的。

 

四、dip

与dp相同,只是名字不一样。

 

五、sp

scaled pixels放大像素的缩写,专门用于处理字体的大小。它不仅与屏幕dpi有关,还与系统的默认字体大小有关。对于同一sp值,屏幕dpi越高,所显示的字体越小;系统字体越大,所显示的字体也越大。这就是我们设置系统字体大小后,所有使用sp为单位的字体都改变了的原因。

 

若字体以dp为单位,则修改系统字体大小,界面的View的字体大小不会改变。

 

例如:对于以下的代码,两个TextView在一个垂直分布的LinearLayout中,第一个TextView使用sp为字体的单位,第二个TextView使用dp为字体的单位:

 

[html]   
 
 
  1. <span style="font-family:Microsoft YaHei;font-size:18px;"><TextView  
  2.     android:text="@string/hello_world"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content"  
  5.     android:textSize="28sp" />  
  6.   
  7. <TextView  
  8.     android:text="@string/hello_world"  
  9.     android:layout_width="wrap_content"  
  10.     android:layout_height="wrap_content"  
  11.     android:textSize="28dp" />  
  12. </span>  

 

在mdpi的设备下,系统的字体为小时,效果图如下:

两种方式的字体是一样大的。若在hdpi的设备上,当系统的字体为普通时,其效果与上图一样。

 

当我设置字体为超大时,效果如下:

可以看到使用dp的字体的大小没有改变,使用sp的字体明显变大了。

你可能感兴趣的文章
WIN8系统安装软件时提示"扩展属性不一致"的解决方法
查看>>
sqlite3.exe 使用
查看>>
微软职位内部推荐-Senior Software Engineer
查看>>
CAD中批量打印
查看>>
蛋疼的Apple IOS Push通知协议
查看>>
MyEclipse10.0 安装 jbpm4.4
查看>>
批处理复制文件(文件夹)排除某目录,某些类型(草稿)
查看>>
【转】shell 编程:冒号 后面跟 等号,加号,减号,问号的意义
查看>>
C#编写COM组件
查看>>
C#属性(Attribute)用法实例解析
查看>>
Android 自定义控件 优雅实现元素间的分割线 (支持3.0以下)
查看>>
Java中间件:淘宝网系统高性能利器
查看>>
ng-bind-html 的使用
查看>>
[OpenSource]浅谈.Net和Java互相调用的三种方式
查看>>
C语言指针的初始化和赋值
查看>>
安卓开发笔记——关于照片墙的实现(完美缓存策略LruCache+DiskLruCache)
查看>>
定义和使用EL函数
查看>>
LoadRunner项目结合抓包工具
查看>>
MySQL show binglog event in 'log_name'
查看>>
开发自己的博客转发插件(跨域)
查看>>