转自:http://blog.sina.com.cn/s/blog_602f87700102v2q8.html
在Android Layout xml文件编辑中,常常需要指定View的位置,大小,间距等。 这些数值可以用多种单位来设置。例如: "120dp" , "60dip", "30px" , "10mm" , "1in" , "36pt"等。
各自涵义如下:
dp: (Density-independent pixel). 密度无关像素单位。
dip: dp的另一种写法。
px: pixel. 像素点。
mm: millimeters .毫米。
in: inches,英寸。
pt:points,点(英寸的 1/72)
(mm(毫米), in(英寸), pt(点) 并非简单的指在屏幕上的大小就是1毫米,1英寸,1点,稍后具体讲解)
先从px(pixel)和dp(Density-independent pixel)说起。
0. 基础知识:
0.1: 屏幕密度(Screen density):
在屏幕的物理单元区域内像素(pixel)的数量。通常单位为dpi(dots per inch). 低密度的屏幕比高密度的屏幕在单位面积上的像素点(pixel)要少。Android将屏幕密度分6级: low, medium, high, extra-high, extra-extra-high, and extra-extra-extra-high
dpi(dots per inch): 每英寸长度内点的个数。160dpi: 则说明在每英寸的距离上,可以显示160个pixel.
0.2:分辨率(Resolution):
屏幕的物理像素点的最大数量。
0.3: dp(Density-independent pixel)相关信息:
Android设备会运行在各种类型的设备上,显示屏也类型多样。不同的显示屏屏幕密度也不同。如果在UI制作时,指定某个距离是N 个Pixel。则在屏幕密度不同的设备上,这个距离就会明显不同。例如:Screen A 160dpi 。Screen B 320dpi 则在Screen A上这个距离仅是Screen B上这个距离的一半。所以需要一个计量单位,与屏幕密度没有关系。所以就产生了dp(Density-independent pixel).
dp: 一个虚拟的像素(pixel)单位,使用它定义UI Layout,则定义的尺寸和位置和屏幕密度无关。
density-independent像素与160dpi屏幕下的像素(pixel)相同。
在真实使用的屏幕像素密度不为160dpi时,系统会根据屏幕密度自动转换dp值到真实pixel值。转换公式为:
px = dp * (dpi / 160)
例如:dpi等于240的屏幕。 一个dp等于1.5个pixel. dpi等于320的屏幕, 一个dp等于2个pixel.
在Android Layout UI 的长度单位使用上,推荐使用dp,使得UI在屏幕密度不同的屏幕上效果相同。
1. 编程得到分辨率和屏幕密度:
DisplayMetrics mertric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(mertric);
Log.w("SamInfo:", String.format("Screen Size is:[%dx%d]. Screen density:[%f]. DPI:[%d]. XDPI:[%f]. YDPI:[%f]. scaledDensity:[%f]", mertric.widthPixels, mertric.heightPixels, mertric.density, mertric.densityDpi, mertric.xdpi, mertric.ydpi, mertric.scaledDensity));
mertric.widthPixels,
mertric.heightPixels,
mertric.density,
mertric.densityDpi,
mertric.xdpi,
mertric.ydpi,
mertric.scaledDensity
分别得到多种信息。
2. 显示的实际大小探讨:
前面提到UI中的单位包括mm(毫米), in(英寸), pt(点),这些都是绝对数据。就算px,dp,在知道一些数据如屏幕密度值后,还是可以计算出它的理论真实大小的。那么是否可以说,我们在Layout Xml 文件中定义的距离,与实际显示中的真实大小(比如几英寸或者几毫米)完全匹配呢?
思考以下几个问题:
A . 长度为1in(英寸)的Button. 是否在不同尺寸,不同分辨率,不同屏幕密度的Screen上长度相同?
B. 长度为160dp的Button。 是否在不同尺寸,不同分辨率,不同屏幕密度的Screen上长度相同?
理论上:
A:1in长度的Button, 在人和Screen上,不管其尺寸,分辨率,屏幕密度有何区别,都应该是1英寸长。
B:长度为160dp的Button则稍有复杂。分析如下:
不管屏幕尺寸,分辨率,只要屏幕密度为160dpi. 则此Button长度都应该是1in。
不管屏幕尺寸,分辨率,屏幕谜底为Ndpi. 每个dp所占pixel应该有:(N/160)个。所以160个dp 需要(N/160)*160个pixel. 即N个Pixel。 N个pixel. 不正就是1in的长度么?
所以从理论上来说:1in的Button。160dp的Button。在任意尺寸,任意分辨率,任意屏幕密度下,长度都是真实的1in.(事实真的如此么?很值得怀疑吧,很明显,同样的程序在手机上,和在电视机上,1in的Button大小绝对不同的)
分享到:
相关推荐
LinearLayout 线性布局 控制组件 横向 或者 纵向 排列 RelativeLayout 相对布局 子组件的位置总是相对兄弟...AbsoluteLayout 绝对布局 组件位置通过x, y坐标来控制, 布局容器不再管理组件位置, 大小, 这些都可以自定义;
3 android:gravity [指定View组件的对齐方式 比如说居中 居右等位置 这里指的是控件中的文本位置并不是控件本身] 4 android:layout gravity [指定Container组件的对齐方式.比如一个button放在linearlayout里 你想把...
android 布局 android 布局android 布局android 布局
android 布局生成图片,封装工具类 ,简单实用,viewgroup生成图片分享微信,快速转化
android布局单位sp,dp,pt,px的用法和区别。
这个程序写了对相对布局和绝对布局的例子,帮助大家理解两者的使用和区别。
设计Android应用程序的界面经常用到xml格式的布局文件。一个布局文件的作用是描述了: - 界面包含哪些控件(也叫组件或视图;示例有按钮,下拉框); - 控件之间的位置关系; - 如何显示界面的整体外观和各个...
常用的几种安卓布局历程,eclipse平台,可以直接导入
可以了解android开发中如何对页面的布局。
Android 相对布局实例 ,RalateLayout
android 程序中动态添加删除控件或布局,设置大小,位置
android 布局的详细分析 android 布局的详细分析 android 布局的详细分析
Android布局高级.doc
android不同的布局资源介绍,包括LinearLayout、RelativeLayout等
Android xml布局文件工具
android界面布局详解
Android布局显示模板加载,空,错误等状态
android 布局别名的应用
android布局属性,在平时开发中不断总结的,很值得参考
NULL 博文链接:https://15035554141.iteye.com/blog/2092780