Android里面的sp和dp网上有很多文章都谈过了,但是看后总有一种意犹未尽的感觉。现在我也来谈谈dp和sp,和大家交流一下,不对之处欢迎拍砖。

一、dp(或者dip device independent pixels)

一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp=1px。不同设备有不同的显示效果,这个和设备硬件有关。

android里的代码如下:

// 文件位置:android4.0\frameworks\base\core\java\android\util\DisplayMetrics.javapublic static final int DENSITY_DEVICE = getDeviceDensity();public float density;public void setToDefaults() {widthPixels = 0;heightPixels = 0;density = DENSITY_DEVICE / (float) DENSITY_DEFAULT; // 这里dp用的比例 densityDpi = DENSITY_DEVICE;scaledDensity = density; // 这是sp用的比例xdpi = DENSITY_DEVICE;ydpi = DENSITY_DEVICE;noncompatWidthPixels = 0;noncompatHeightPixels = 0;}private static int getDeviceDensity() {// qemu.sf.lcd_density can be used to override ro.sf.lcd_density// when running in the emulator, allowing for dynamic configurations.// The reason for this is that ro.sf.lcd_density is write-once and is// set by the init process when it parses build.prop before anything else.return SystemProperties.getInt("qemu.sf.lcd_density",SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT)); // 从系统属性ro.sf.lcd_density里获取屏幕密度// 文件位置:android4.0\packages\inputmethods\latinime\java\src\com\android\inputmethod\latin\Utils.javapublic static float getDipScale(Context context) {final float scale = context.getResources().getDisplayMetrics().density;return scale;}public static int dipToPixel(float scale, int dip) {return (int) (dip * scale + 0.5); // dip到px的换算公式}                

二、sp(Scaled Pixels)

主要用于字体显示,与刻度无关的一种像素,与dp类似,但是可以根据用户的字体大小首选项进行缩放。

// 文件位置:android4.0\packages\apps\settings\src\com\android\settings\Display.javaprivate Spinner.OnItemSelectedListener mFontSizeChanged= new Spinner.OnItemSelectedListener() {public void onItemSelected(android.widget.AdapterView av, View v,int position, long id) {if (position == 0) {  // 下面是设置字体比例的代码mCurConfig.fontScale = .75f;} else if (position == 2) {mCurConfig.fontScale = 1.25f;} else {mCurConfig.fontScale = 1.0f;}updateFontScale();}public void onNothingSelected(android.widget.AdapterView av) {}};private void updateFontScale() {mDisplayMetrics.scaledDensity = mDisplayMetrics.density *mCurConfig.fontScale; // 将设置的字体比例代码合到scaledDensity里去float size = mTextSizeTyped.getDimension(mDisplayMetrics);mPreview.setTextSize(TypedValue.COMPLEX_UNIT_PX, size);}                 

老生常谈之Android里的dp和sp相关推荐

  1. Android px、dp、sp之间相互转换

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

  2. Android像素单位dp,sp,px,pt的区别和比较

    转载自: https://zhidao.baidu.com/question/1736411549687308627.html?qbl=relate_question_0&word=dp%BA ...

  3. Android 长度单位(dp、sp、px、in、pt、mm)详解

    px: 即像素,1px代表屏幕上一个物理的像素点: px单位不被建议使用,因为同样100px的图片,在不同手机上显示的实际大小可能不同,如下图所示(图片来自android developer guid ...

  4. Android的px、dp和sp

    Android的px.dp和sp px: 即像素,1px代表屏幕上一个物理的像素点:偶尔用到px的情况,是需要画1像素表格线或阴影线的时候. dp: 这个是最常用但也最难理解的尺寸单位.它与" ...

  5. android UI设计图片和文字尺寸px对应dp、sp值换算

    屏幕尺寸:指屏幕的对角线长度,单位是英寸,1英寸等于2.54厘米,常见尺寸有2.4,2.8,3.5,3.7,4.2,5.0,5.5,6.0等. 屏幕分辨率:指在纵横向上的像素点数,单位是px,1px为 ...

  6. android 关于px转化为dp,sp

    一款优秀app的产生,往往需要有一套精美华丽的UI设计图,诚然,UI仅仅只是个开始,有追求极致的前端工程师开发软件时尽可能地去贴近UI的设计才是重中之重. 我们知道,Android的尺寸单位一般采用d ...

  7. Android中dp、sp、px、pt之间的换算关系

    Android中dp.sp.px.pt之间的换算关系 换算公式 1 dp = (dpi/160) px; 1 in = 72 pt = dpi dp; 1 pt = dpi/72 dp: 当dpi为1 ...

  8. Android常用计量单位详解(px,in,mm,pt,dp,dip,sp)

    Android常用计量单位详解(px,in,mm,pt,dp,dip,sp) 在传统PC软件开发中经常以像素为单位设计计算机用户界面.例如,定义一个宽度为300像素的表单字段,列之间的间距为5个像素, ...

  9. 【转】Android中dp,px,sp概念梳理以及如何做到屏幕适配

    2019独角兽企业重金招聘Python工程师标准>>> 首先来看一下他们的基本概念: px   :是屏幕的像素点 dp   :一个基于density的抽象单位,如果一个160dpi的 ...

最新文章

  1. 奇点汽车打算明年推L3自动驾驶,不用激光雷达
  2. 一张图告诉你什么是系统架构师
  3. mathcal 对应于什么库_数据库理论
  4. codeforces 675E E. Trains and Statistic(线段树+dp)
  5. html flex 的高度,html – 使flexbox行成为最短子元素的高度?
  6. Linux VMware 快照不准,VmWare Workstation 关于Linux 虚拟机快照或克隆后 识别不到网卡问题...
  7. router优点 vue_Vue 出场率99%的面试题
  8. LayuI固定块关闭
  9. rabbitmq-web-stomp 优化过程
  10. poj2406(kmp循环节)
  11. debian8.4安装sqliteman总结
  12. java调用python需要复权吗_用Python从新浪下载A股复权因子信息
  13. 提升电脑运行速度,10个秘笈,让你的win10飞起来
  14. 【MySQL从入门到精通】【高级篇】(二十五)EXPLAIN中ref、rows、filtered、Extra字段的剖析
  15. python如何将秒数转化成时分秒_python时分秒化为秒 python时分秒的正则表达式
  16. LiveMedia视频平台是如何实现基于网页的语音对讲
  17. Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Feb 2023)
  18. 无向简单图怎么判断_无向图基础
  19. linux中如果编译二进制,在linux中把汇编或c程序交叉编译成二进制文件烧录开发板过程详解...
  20. Docker超详细版教程通俗易懂 -之- 进阶篇

热门文章

  1. git push 提交失败
  2. 设想一种防U盘病毒的方法,不知道是否管用
  3. 项目实战:Qt贝塞尔曲线拽托顶点实时显示工具
  4. mysql表关联查询都有什么方式_所有关联表查询方式
  5. FIAA固定资产【05资产购置】
  6. 图灵计算机科学丛书•《具体数学中文版》下载
  7. [从头读历史] 第280节 诗经目录以及十五国风的地域分布
  8. 【机器学习】强化学习算法的优化
  9. 原生实现freeCodeCamp上的Build a Personal Portfolio Webpage
  10. SQL索引碎片监控看板——C#编写辅助程序员运维的工具