Android dp和sp的用法汇总
1 》
dp 是跟像素密度无关的单位,也就是说在相同尺寸、但不同的分辨率的手机上,用dp标识的东西,显示的大小是一样的。
sp是用于标识字体的,它不仅跟屏幕尺寸有关,还跟设置的系统字体大小有关。
- <TextView
- android:id="@+id/tv"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="wahahahhahahahahhah"
- android:textSize="15sp"
- />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="wahahahhahahahahhah"
- android:textSize="15dp"
- android:layout_below="@+id/tv"
- />
系统字体大小为中时(默认的哦)
改为特大时:
所以 字体大小要用sp哦~
2》
Android设置字体大小, 该用sp还是dp? 大部分人肯定脱口而出, 用sp啊, 傻瓜都知道要用sp而不是dp!!!
那么为什么呢? 可能有人会说, 是google官方专门定义了sp这个单位来描述字体大小, google建议这样搞的!
我想说的是, 大家可能被google误导了吧. 我们来通过实验证明这个道理:
首先我示范一下sp, 我想listview item中的主文本大小设置成18sp, 然后我们看看他在不同屏幕上的反应:
1. Nexus 5
2. 华为某低端机
有没有发现, 华为机器上字体明显大了许多, 有点不符合预期啊有木有!!!
下面我们把sp改成dp, 也就是字体大小改成18dp, 再看看效果:
1. Nexus 5
2. 华为某低端机
明显发现, 用dp的话, 在高端机和低端机上体验更加一致, 字体大小比例更加合适!!!
当然, 我不是要和google抗衡, 非得用dp不用sp, 其实在实际开发中, 我们还是应该多用sp少用dp, 只有在字体比较大的时候, 比如超过了15sp时, 大家这时候就可以考虑用dp试试了.
3》
-
dp也就是dip,这个和sp基本类似。
如果设置表示长度、高度等属性时可以使用dp或sp。但如果设置字体,需要使用sp。
-
dp是与密度无关,sp除了与密度无关外,还与scale无关。如果屏幕密度为160,这时dp和sp和px是一样的。1dp=1sp=1px,但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸),而屏幕密度变成了320。那么原来TextView的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成160dp或160sp的话。系统会自动将width属性值设置成320px的。也就是160 * 320 / 160。其中320 / 160可称为密度比例因子。
-
如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换