简单谈谈Android中SP与DP的区别

 更新时间:2016年09月12日 09:04:39   作者:技术小黑屋  
Android里面的sp和dp网上有很多文章都谈过了,但是看后总有一种意犹未尽的感觉。现在我也来谈谈dp和sp,和大家交流一下,不对之处欢迎拍砖。

从一开始写Android程序,就被告知这些常识

一、dp(或者dip device independent pixels)

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

二、sp(Scaled Pixels)

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

简单的说

  • 长度宽度的数值要使用dp作为单位放入dimens.xml文件中
  • 字体大小的数值要使用sp作为单位,也放入dimens.xml文件中

然后,就没有然后了,仿佛潜台词就是说,你记住去用就行了.

偶然有一天,当我们阴差阳错地将字体写成了dp,也是可以工作,而且效果和sp一样.

这时候,就开始怀疑了,到底有啥区别呢,dp和sp有什么不同呢?

我们做个简单的Sample验证一下,如下,一个布局代码

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:text="Hello World! in SP" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="18dp"
    android:text="Hello World! in DP"
    />

得到的效果是这个样子

但是,当我们进入系统设置中修改字体大小时

再次进入之前的界面,发现了一些不一样的东西.

由此看来

  • 使用sp作为字体大小单位,会随着系统的字体大小改变
  • 而dp作为单位则不会.

关于sp, 文档 的描述为:

Scale-independent Pixels – This is like the dp unit, but it is also scaled by the user's font size preference. It is recommend you use this unit when specifying font sizes, so they will be adjusted for both the screen density and the user's preference.

大致意思为

  • sp除了受屏幕密度影响外,还受到用户的字体大小影响
  • 通常情况下,建议使用sp来跟随用户字体大小设置

因此通常情况下,我们还是建议使用sp作为字体的单位,除非一些特殊的情况,不想跟随系统字体变化的,可以使用dp.

相关文章

  • Android编程实现自动检测版本及自动升级的方法

    Android编程实现自动检测版本及自动升级的方法

    这篇文章主要介绍了Android编程实现自动检测版本及自动升级的方法,涉及Android版本检测,匹配,下载及自动安装等技巧,需要的朋友可以参考下
    2016-01-01
  • Android获取RecyclerView滑动距离方法详细讲解

    Android获取RecyclerView滑动距离方法详细讲解

    RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。其可以实现数据纵向滚动,也可以实现横向滚动(ListView做不到横向滚动)。接下来讲解RecyclerView的用法
    2023-01-01
  • Android 中 GridView嵌套在ScrollView里只有一行的解决方法

    Android 中 GridView嵌套在ScrollView里只有一行的解决方法

    本文给大家带来两种有关Android 中 GridView嵌套在ScrollView里只有一行的解决方法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-10-10
  • Android开发实现简单计算器功能

    Android开发实现简单计算器功能

    这篇文章主要为大家详细介绍了Android开发实现简单计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • 智能指针与弱引用详解

    智能指针与弱引用详解

    智能指针有很多实现方式,android 中的sp 句柄类实际上就是google 实现的一种强引用的智能指针。我没有仔细看android sp 的实现方式,但其基本原理是固定的,现在我们从一个相对简单的例子来看智能指针的实现
    2013-09-09
  • Android页面中可编辑与不可编辑切换的实现

    Android页面中可编辑与不可编辑切换的实现

    这篇文章主要给大家介绍了关于在Android页面中可编辑与不可编辑切换的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Android Studio 配置忽略文件的方法实现

    Android Studio 配置忽略文件的方法实现

    这篇文章主要介绍了Android Studio 配置忽略文件的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • Android自定义View实现照片裁剪框与照片裁剪功能

    Android自定义View实现照片裁剪框与照片裁剪功能

    这篇文章主要介绍了Android自定义View实现照片裁剪框与照片裁剪功能的相关资料,需要的朋友可以参考下
    2016-07-07
  • Android编程实现XML解析与保存的三种方法详解

    Android编程实现XML解析与保存的三种方法详解

    这篇文章主要介绍了Android编程实现XML解析与保存的三种方法,结合实例形式详细分析了Android实现xml解析的SAX、DOM、PULL三种方法的相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • Android键盘输入语言设置默认打开myanmar缅甸语的步骤

    Android键盘输入语言设置默认打开myanmar缅甸语的步骤

    如何实现Android键盘输入语言默认打开为myanmar缅甸语,如果要设置某种语言在输入法默认打开可按一下步骤添加文件,我这里已经验证时OK的
    2013-06-06

最新评论