CSS绝对长度单位是对于输出设备(output device)而言的。拿pt来说,这是一个在文字排版工具(word,adobe等)中非常常用的字体单位,不管你的显示器分辨率是1024*768,还是800*600,同一篇文档打印在纸面上的结果是一样的。
写网页用哪个长度单位更好,是px还是pt呢?
我个人比较偏向px,因为px能够精确地表示元素在屏幕中的位置和大小,网页主要是为了屏幕显示,而不是为了打印等其它需要的。
CSS相对长度单位(relative length unit)
CSS相对长度单位中的相对二字,表明了其长度单位会随着它的参考值的变化而变化,不是固定的。以下是CSS相对长度单位列表:
CSS相对长度单位
说明:
em 元素的字体高度The height of the element s font
ex 字母x的高度The height of the letter "x"
px 像素Pixels
% 百分比Percentage
CSS绝对长度单位(absolute length unit)
绝对长度单位是一个固定的值。比如我们常用的有mm,就是毫米的意思。以下是CSS绝对长度单位列表:
CSS绝对长度单位
说明
in 英寸Inches (1英寸 = 2.54 厘米)
cm 厘米Centimeters
mm 毫米Millimeters
pt 点Points (1点 = 1/72英寸)
pc 皮卡Picas (1皮卡 = 12 点)
像素是相对于显示器屏幕分辨率而言的。譬如,WiNDOWS的用户所使用的分辨率一般是96像素/英寸。而MAC的用户所使用的分辨率一般是72像素/英寸。所以在WiNDOWS的CSS中dpi为 96像素/英寸。
另附上对照表:
常见照片尺寸、像素及打印尺寸对照表(实用)
英寸
照片规格
厘米
像素
数码相机类型
打印尺寸
分辨率:300dpi
1寸
2.5×3.5cm
413×295
/
/
身份证大头照
3.3×2.2
390×260
/
/
2
3.5×5.3cm
626×413
/
/
小2寸(护照)
4.8×3.3cm
567×390
/
/
5寸
12.7×8.9
1200×840以上
100万像素
/
6寸
15.2×10.2
1440×960以上
130万像素
/
7寸7×5
17.8×12.7
1680×1200以上
200万像素
12.7x17.7
8寸8×6
20.3×15.2
1920×1440以上
300万像素
15.2x20.3
10寸10×8
25.4×20.3
2400×1920以上
400万像素
20.3x25.4
12寸12×10
30.5×20.3
2500×2000以上
500万像素
25.4x30.5
15寸15×10
38.1×25.4
3000×2000
600万像素
25.4x38.1
最近做项目发现,同样的分辨率2台机器,某个界面的样式就是不一样,经过多次测试发现,原来第一台pad(lenovo
A1_07)的密度为1.5,转换成dpi是240,属于高密度;另一台pad的密度为1,属于中等密度,转换成dpi就是160,应该属于中等密度
这就发现问题了,
解决方法:
应该在values文件夹下面分别放置values-hdpi,
values-mdpi分别对应的样式,就OK了
以下是学习资料
screen
resolution
把设备上的物理dpi 用乘法转换成 dips
Androidname approx. resolution
multiply by this get dips
ldpi ~120 dpi
1.333
mdpi ~160 dpi 1.0 (基线密度)
tvdpi ~213
dpi 0.751
hdpi ~240 dpi
0.67
xhdpi ~320 dpi
0.5
dpi:每英寸像素数(密度*160)
density:密度
手机像素密度(density)实际上是以单位英寸160个像素作为参考标准,主要密度有0.75,1,1.5和2,当密度为2时就表示1英寸有320个像素,Android中通过代码可以获取到屏幕的像素值和密度,根据这些值就可以反向算出屏幕的物理尺寸
屏幕尺寸=屏幕对角线的像素值/(密度*160)=
[(长的平方+宽的平方)开根号] /
(密度*160)
实践过程:
由于Android设备中获取的密度density本身是个约等于的数值,比如计算出密度的准确值density=1.575,实际在代码中读到的density=1.5,
需要实现一个简单的计算屏幕尺寸的应用在不同设备上验证物理尺寸准确程度,具体代码如下:
DisplayMetrics metric = new
DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int width
= metric.widthPixels; // 屏幕宽度(像素)
int height =
metric.heightPixels; // 屏幕高度(像素)
float density = metric.density;
// 屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = metric.densityDpi; //
屏幕密度DPI(120 / 160 / 240)
double diagonalPixels =
Math.sqrt(Math.pow(width, 2)+Math.pow(height, 2)) ;
double screenSize =
diagonalPixels/(160*density) ;