3570
- 收藏
- 点赞
- 分享
- 举报
Android中常用单位dp,sp和px的区别、关系和使用问题
[i=s] 本帖最后由 jp1017 于 2015-8-18 09:22 编辑 [/i]
安卓中常用的三种单位dp、sp、px到底是什么呢,这里揭秘下:
一:区别
1、dip或dp (device independent pixels)设备独立像素,一种基于屏幕密度的抽象单位,在每英寸160点的显示器上,1dip=1px。
2、sp (scaled pixels — best for text size) 放大像素,主要处理字体的大小。可以根据用户字体大小首选项进行缩放。
3、px (pixels)像素,每个px对应屏幕上的一个点,这个用的比较多。
这里还有一个,屏幕像素密度(ppi)计算公式如下:ppi = √(长度像素数的平方+ 宽度像素数的平方) / 屏幕对角线英寸数,如800×480的4英寸屏幕的ppi =( √(800*800+480*480)) / 4 = 233ppi。
二:换算
dp与px换算:
px = dp*ppi/160
dp = px / (ppi / 160)
sp与px换算
px = sp*ppi/160
sp = px / (ppi / 160)
三:多屏幕适配的3条原则:
1、设置view的属性android:layout_width和android:layout_height的值时,wrap_content,match_parent或dp比px更好,文字大小应该使用sp来定义。
2、在程序的代码中不要出现具体的像素值,在dimens.xml中定义;
3、对不同的屏幕提供合适大小的图片。
四:屏幕适配的注意事项:
1、AndroidManifest.xml设置
android:anyDensity=”true”时,应用程序安装在不同密度的终端上时,程序会分别加载xxhdpi、xhdpi、hdpi、mdpi、ldpi文件夹中的资源。
相反,如果设为false,即使在文件夹下拥有相同资源,应用不会自动地去相应文件夹下寻找资源:
1) 如果drawable-hdpi、drawable-mdpi、drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示,那么系统会去加载drawable_mdpi文件夹中的资源;
2) 如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源,其他同理;
3) 如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有,系统会加载drawable-mdpi中的资源,其他同理,使用最接近的密度级别。
2、横屏竖屏目录区分
1) drawable
a) drawable-hdpi该图片即适用于横屏,也适用于竖屏;
b) drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹的资源;
c) drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源。其他同理。
2) layout
在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换。
3、使用9-patch PNG图片
使用图片资源时,如果出现拉伸,因为图片处理的原因,会变形,导致界面走形。9-patch PNG图片也是一种标准的PGN图片,在原生PNG图片四周空出一个像素间隔,用来标识PNG图片中哪些部分可以拉伸、哪些不可以拉伸、背景上的边框位置等。
“上、左”定义可拉伸区域,“右、下”定义显示区域,如果用到完整填充的背景图,建议不要通过android:padding来设置边距,而是通过9-patch方式来定义。
4、不同的layout
Android手机屏幕大小不一,有480×320, 640×360, 800×480……怎样才能让Application自动适应不同的屏幕呢?其实很简单,只需要在res目录下创建不同的layout文件夹,比如:layout-640×360、layout-800×480……所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。
参考:
http://blog.m1910.com/archives/1205.html http://blog.csdn.net/guozh/article/details/8954994 http://blog.csdn.net/jdsjlzx/article/details/45891551 http://www.cnblogs.com/zhwl/archive/2013/06/12/3132722.html http://www.cnblogs.com/bluestorm/p/3640786.html
我来回答
回答0个
时间排序
认可量排序
暂无数据
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币
Markdown 语法
- 加粗**内容**
- 斜体*内容*
- 删除线~~内容~~
- 引用> 引用内容
- 代码`代码`
- 代码块```编程语言↵代码```
- 链接[链接标题](url)
- 无序列表- 内容
- 有序列表1. 内容
- 缩进内容
- 图片![alt](url)
相关问答
-
2016-03-19 18:13:46
-
2015-06-23 15:31:32
-
2020-08-16 19:12:49
-
2018-09-01 11:28:46
-
2019-01-01 12:59:53
-
2023-07-28 18:02:31
-
2015-01-05 08:54:37
-
2014-02-19 09:37:22
-
2015-07-15 21:23:20
-
2020-01-13 16:19:44
-
2018-07-06 16:17:59
-
2018-07-13 11:36:59
-
2020-10-22 13:40:37
-
2020-11-27 14:26:16
-
2018-12-07 17:28:35
-
2020-08-28 17:24:21
-
2020-12-08 15:40:38
-
2015-01-23 10:59:21
-
2015-09-11 19:56:38
无更多相似问答 去提问
点击登录
-- 积分
-- E币
提问
—
收益
—
被采纳
—
我要提问
切换马甲
上一页
下一页
悬赏问答
-
50如何获取vpss chn的图像修改后发送至vo
-
5FPGA通过Bt1120传YUV422数据过来,vi接收不到数据——3516dv500
-
50SS928 运行PQtools 拼接 推到设备里有一半画面会异常
-
53536AV100的sample_vdec输出到CVBS显示
-
10海思板子mpp怎么在vi阶段改变视频数据尺寸
-
10HI3559AV100 多摄像头同步模式
-
9海思ss928单路摄像头vio中加入opencv处理并显示
-
10EB-RV1126-BC-191板子运行自己编码的程序
-
10求HI3519DV500_SDK_V2.0.1.1
-
5有偿求HI3516DV500 + OV5647驱动
举报反馈
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明
提醒
你的问题还没有最佳答案,是否结题,结题后将扣除20%的悬赏金
取消
确认
提醒
你的问题还没有最佳答案,是否结题,结题后将根据回答情况扣除相应悬赏金(1回答=1E币)
取消
确认