Android上dip、dp、px、sp等单位说明

news/2024/7/3 12:29:42 标签: android, float, 图形

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

px: pixels(
像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。 

pt: point
,是一个标准的长度单位,1pt1/72英寸,用于印刷业,非常简单易用; 

sp: scaled pixels(
放大像素). 主要用于字体显示best for textsize 

=========================

关于换算(以 sp pt 为例) 
查看 TextView 等类的源码,可知: 

case COMPLEX_UNIT_PX: 
return value; 
case COMPLEX_UNIT_SP: 
return value *metrics.scaledDensity; 
case COMPLEX_UNIT_PT: 
return value * metrics.xdpi *(1.0f/72); 

-------------------------- 
scaledDensity =DENSITY_DEVICE / (float) DENSITY_DEFAULT; 
xdpi = DENSITY_DEVICE; 

-------------------------- 
DENSITY_DEFAULT =DENSITY_MEDIUM = 160; 

============================================ 
所以:假设 pt sp 取相同的值 1,则可设 1pt 1sp 之间系数为 x 

1 * DENSITY_DEVICE / 72 = x *1 * DENSITY_DEVICE / 160 => 
x = 160 / 72 = 2.2222 

也就是说在 Android 中, 1pt 大概等于 2.22sp 

===================================================================
什么是DipSp 

过去,程序员通常以像素为单位设计计算机用户界面。例如,定义一个宽度为300像素的表单字段,列之间的间距为5个像素,图标大小为16×16像素等。这样处理的问题在于,如果在一个每英寸点数(dpi)更高的新显示器上运行该程序,则用户界面会显得很小。在有些情况下,用户界面可能会小到难以看清内容。 

与分辨率无关的度量单位可以解决这一问题。Android支持下列所有单位。 

px
(像素):屏幕上的点。 

in
(英寸):长度单位。 

mm
(毫米):长度单位。 

pt
(磅):1/72英寸。 

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

dip
:与dp相同,多用于android/ophone示例中。 

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

为了使用户界面能够在现在和将来的显示器类型上正常显示,建议大家始终使用sp作为文字大小的单位,将dip作为其他元素的单位。当然,也可以考虑使用矢量图形,而不是用位图


http://www.niftyadmin.cn/n/1642250.html

相关文章

git add 所有修改文件_git lesson4 关于文件修改的add和commit操作

回顾:上篇主要讲述的是概念性的东西,比如什么是git的工作区(working directory)和暂存区(stage)以及分支(master)git与别的版本控制系统的一个不同之处就是有暂存区的概念。新知识&a…

WindowsXP下Ubuntu 12.04硬盘安装方法

分区配置: 在WindowsXP中,将最后一个分区删除,作为自由空间(free space),在linux安装过程中,选择自定义分区,分区建议: / 根分区,除了后面的指定…

解决Android的ListView控件滚动时背景变黑

如果大家在非黑色背景下使用ListView控件时,Android默认可能在滚动ListView时这个列表控件的背景突然变成黑色。这样可能导致程序的黑色的背景和主程序的主题既不协调。解决的方法Google在设计Android时也考虑了,在Layout的ListView中加入 android:cache…

子类重载父类函数_我们不一样,不一样,重写与重载

1. 问题描述随着头越来越秃,会发现Java中重写与重载越来越重要,贯穿整个编程过程,用通俗的语言简单介绍2. 问题方案重写和重载都是java多态性的一种表现。2.1 重写(Override)2.1.1 重要特征(1)重…

当遇到类A的内部类B时,内部类B中private,protected 这些关键字对类A将不再起任何保护作用

今天在Android的开发环境中做了一个测试, 类A中加了一个内部类B, B类中有private, protected, public等属性和方法,结果在类A中的public 方法中访问类B中的所有成员都没报错,很是诧异。按照我的理解,起码类B中的所有private成员不…

erase() opencv_树莓派:openCV之火焰检测

根据论文An Early Fire-Detection Method Based on Image Processing ,The Author is:Thou-Ho (Chao-Ho) Chen, Ping-Hsueh Wu, and Yung-Chuen Chiou 中原理实现火焰检测。基本原理:主要结合RGB判据和HIS判据,设定合适的阈值条件,检测出火焰…

android json解析及简单例子

JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交…

final关键字_java学习笔记:构造方法与final关键字

java学习笔记:构造方法与final关键字一、this关键字我想,在昨天的代码示例中有不少人对this这个词有疑问吧,这个this是干什么的呢?下面我来为大家介绍一下this关键字的三个作用。1、区分成员变量与局部变量这种情况在咱们学习阶段…