常见尺寸单位

Android开发中的常用尺寸单位有如下几种:

dp (dip)

px

pt

inch

sp

算不知道确切含义,相信对于以上这几种尺寸单位大家也都比较脸熟,这里先让我们重新认识一下它们:

dp (dip): 即设备无关像素(device independent pixels),这种尺寸单位在不同设备上的物理大小相同。

px:即像素(pixel),这个不用多说。

pt:通常用来作为字体的尺寸单位,1 pt相当于1/72英寸。

inch:英寸,1 英寸约等于2.54厘米,主要用来描述手机屏幕的大小。

sp:大部分人只知道它通常用作字体的尺寸单位,实际大小还与具体设备上的用户设定有关。(如果你对"sp"的了解停留于此,那么看完这篇文章后你会更透彻的理解它^ _ ^)

在上面几种常见的尺寸单位,dp和sp可以看做是虚拟尺寸。其中dp是与设备无关的虚拟像素单位,开发者为UI控件指定以dp为单位的大小后,在不同屏幕密度的Android设备上便能够具有相同的物理尺寸。dp的出现让开发者无需关注屏幕密度、物理像素之间的换算关系。sp则与dp相似,但它主要用作字体的尺寸单位,与dp的区别是:Android系统支持用户设定字体大小,因而sp的实际大小还会根据用户设定在原基础上进行缩放。

下面来详细介绍dp与sp这两种尺寸单位。

尺寸单位详解之dp

dp的全称是device independent pixels,在具有不同屏幕密度的设备上,1 dp的物理大小是相同的。那么,什么是屏幕密度呢?

屏幕密度

手机的屏幕密度通常指的是手机屏幕的dpi(dots per inch),也就是每英寸的像素数。对于Android手机来说,常见的dpi有如下几种:

ldpi:对应的dpi范围为0 ~ 120,也就是说每英寸有0到120个像素点的屏幕的屏幕密度都属于ldpi

mdpi:dpi范围为120 ~ 160

hdpi:dpi范围为160 ~ 240

xhdpi:dpi范围为240~320

xxhdpi:dpi范围为320~480

在实际开发中,通常以dpi值120、160、240、320、480分别指代ldpi、mdpi、hdpi、xhdpi、xxhdpi。通常屏幕密度越大的手机显示的图像会越细腻。可以通过如下代码获取当前Android设备的屏幕密度:

private void getDpi() {

DisplayMetrics dm = getResources().getDisplayMetrics();

Log.i("TAG", "density = " + dm.density);

Log.i("TAG", "densityDpi = " + dm.densityDpi);

}

若我们在一台屏幕密度为320dpi的Android手机上运行以上代码,会得到如下输出:

density = 2

densityDpi = 320

上面输出中的densityDpi就是Android手机屏幕的dpi值,那么density是什么呢?实际上它代表的是当前屏幕的dpi值与基准dpi值的比值,这个基准dpi值为160。

现在我们已经理解了dpi,接下来让我们揭开dp的神秘面纱。

dp

上面我们提到了选择dpi值160作为基准屏幕密度,这个基准屏幕密度人为建立起了dp与px间的关系:在dpi为160的Android设备上,1 dp = 1px。假设x为某UI控件以px为单位的大小,y为同一UI控件以dp为单位的大小,densityDpi表示屏幕密度,则x与y的关系为:x = y * densityDpi / 160。

介绍完了dp,接下来让我们探究一下sp这个尺寸单位的真面目。

尺寸单位详解之sp

在介绍sp之前,我们先来一起看下TypedValue类中包含的一个用户将dp、sp等单位转换为px的静态方法:

public static float applyDimension(int unit, float value,DisplayMetrics metrics) {

switch (unit) {

case COMPLEX_UNIT_PX:

return value;

case COMPLEX_UNIT_DIP:

return value * metrics.density;

case COMPLEX_UNIT_SP:

return value * metrics.scaledDensity;

case COMPLEX_UNIT_PT:

return value * metrics.xdpi * (1.0f/72);

case COMPLEX_UNIT_IN:

return value * metrics.xdpi;

case COMPLEX_UNIT_MM:

return value * metrics.xdpi * (1.0f/25.4f);

}

return 0;

}

若要将dp转换为px,会执行如下代码:

return value * metrics.density;

density我们在前面介绍过,指的是当前dpi与基准dpi(160)的比值。density的计算方式就是当前屏幕的dpi除以160。也就是说,在屏幕的dpi为120、160、320、480时,density的值分别为0.75、1、2、3。

若要将sp转换为px,则会执行如下代码:

return value * metrics.scaledDensity;

可以看到,sp转换为px的计算公式与dp转换为px时相似,那么scaledDensity是什么呢?实际上,scaledDensity不同于density,scaledDensity是可以动态改变的,当用户改变了Android设备的字体缩放比例时,scaledDensity的值就会发生变化。scaledDensity的计算公式为:scaledDensity = density * fontScale。其中fontScale代表用户设定的Android设备字体缩放比例,默认为1。也就是说,当用户没有改变Android设备的字体缩放比例时,sp、dp与px的换算是相同的。

多分辨率之殇

市面上存在着的各种不同分辨率的Android设备为广大Android开发者挖了众多的坑,比如:

需要为不同分辨率的Android设备单独维护一套dimens文件;

通常UI设计师只会针对某种特定分辨率的设备为我们标注UI控件的像素大小,相信不少小伙伴都受够了手动换算不同分辨率设备上UI控件像素大小的痛苦;

通常我们需要为每种分辨率的Android设备维护一个drawable文件夹以获得比较好的图片显示效果,这会导致apk文件尺寸的臃肿;而且若某个drawable文件夹下的图片需要修改,那么就需要替换其他所有drawable文件夹中对应的图片。如果不小心漏掉了某个drawable文件夹下的图片,则会导致该图片在某些分辨率的手机上失真。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

android字体单位sp,Android中的常用尺寸单位(dp、sp)快速入门教程相关推荐

  1. Android APPUI设计、切图的常用尺寸大全

    今天在APPUI设计群里 ,不少朋友在问  android APPUI设计.切图的常用尺寸到底是多少?很不清楚,所以老谭在此跟大家分享下. Android 系统就被设计为一个可以在多种不同分辨率的设备 ...

  2. Android 2D游戏引擎AndEngine快速入门教程

    Android 2D游戏引擎AndEngine快速入门教程 介绍:AndEngine是一款知名的Android 2D游戏引擎.该引擎代码开源,并且可以免费使用.本书详细讲解如何使用AndEngine引 ...

  3. CSS常用尺寸单位含义总结

    CSS常用尺寸单位含义总结(em,rem,ex,px,cm,mm,in,pt,pc,ch,vw,vh,vmin,max,%,fr...) 1in = 2.54cm = 25.4 mm = 72pt = ...

  4. 视频教程-Lifecycle组件快速入门教程-Android

    Lifecycle组件快速入门教程 Android研发工程师.南京邮电大学毕业,曾就任于创新工场,现就任于某知名大型移动互联网公司,CSDN博客讲师.<libGDX移动游戏开发从入门到精通> ...

  5. realm android,Realm for Android快速入门教程

    介绍 如果你关注安卓开发的最新趋势,你可能已经听说过 Realm .Realm是一个可以替代SQLite以及ORMlibraries的轻量级数据库. 相比SQLite,Realm更快并且具有很多现代数 ...

  6. 认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程

    认识AndEngine什么是AndEngine 随着Android手机.平板的盛行,Android下的游戏也不断的变得火热.而对于游戏开发有兴趣的同学们,应该也想要学习开发游戏.虽说游戏开发的引擎较多 ...

  7. android中的长度单位介绍(dp,sp,px,in,pt,mm)

    作为小白学习了一段时间的android,在学习过程中却一直有个疑问,在设置控件大小时面对这几个单位却不知如何选择,查找相关资料后了解了其含义,今天来分享下 dp或dip(device independ ...

  8. android 字体大小换算,Android单位换算与UI适配

    一,pt.px.屏幕尺寸.分辨率及ppi关系与单位换算 pt(point):磅,一个标准的固定长度单位,大小为1/72英寸. 主要用于印刷和平面设计 1inch = 2.54cm = 72pt px( ...

  9. android字体颜色黑色,Android中颜色选择器和改变字体颜色的实例教程

    1.构建一张七彩图: 我们经常看到这种样子的颜色选择器吧.. 然后其实右边的亮度选择是: 这样我们的代码就可以进行啦... // 创建七彩图片 private void init() { int[] ...

  10. android 字体跑马灯,Android中使用TextView实现文字跑马灯效果

    通常情况下我们想实现文字的走马灯效果需要在xml文件中这样设置 android:layout_width="wrap_content" android:layout_height= ...

最新文章

  1. 寒武纪宣布完成B轮融资 整体估值达25亿美元
  2. 计算机科学与技术联合培养是什么意思,联合培养
  3. Python通过future处理并发
  4. xml python2.6_如何使用前缀选项解析python 2.6中的参数为-f file.xml
  5. Linxu安装Tomcat与Jdk并卸载自带OpenJdk
  6. rfc8222045
  7. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十三║Vue实战:Vuex 其实很简单
  8. 在什么情况下,刘强东会丧失京东的控制权?
  9. java访问其它服务器,一个Java Web应用程序是否可以在tomcat服务器的同一本地主机中调用另一个Java Web应用程序...
  10. 鸿蒙系统无限延期,鸿蒙系统下月到来,三款手机首批升级,华为P50系列延期发布!...
  11. 盐池元宵转九曲【山乡元夕】
  12. tp中如何调用科大讯飞的语音转写
  13. VS2019安装和使用教程(超详细)
  14. 如何将base64码保存为图片
  15. 一文详解Type C-CC引脚的作用
  16. 【MATLAB】错误使用 surf (line 74) 解决+错误使用 mesh (line 75)
  17. DEBUG系列一:Dumpdebug_SAP刘梦_新浪博客
  18. 软件测试怎么保证数据的准确性,在MT4软件EA测试过程中,如何获得99.9%的数据质量,提高EA测试的准确性 -...
  19. 关于mail mailx 以及sendmail 的理解
  20. excel隐藏不需要的所有行和列

热门文章

  1. 朋友们给《Java程序员,上班那点事儿》的赠言
  2. 关于“多目的地址的pix防火墙nat”的总结
  3. 04.spring boot配置文件--yml
  4. 14_按类别分页展示商品
  5. Controller类中方法返回值详解
  6. Luogu3613 睡觉困难综合征
  7. tensorflow用c语言,安装TensorFlow C语言版
  8. indesign缩放图片被切割_InDesign怎么改变图片的大小
  9. word 编辑域中的汉字_神器!10秒在word中编辑复杂数学公式,不用mathtype也行!...
  10. v3 微信api 请求微信_GitHub - helibin/wechatpay-postman-script: 微信支付API v3的调试工具...