我无法理解dimen资源属性。
我有3个值文件夹:value-normal,value-large和value-xlarge。
我已将titlesize定义为20为正常,25为大而30为xlarge,这是我的正常值文件:
<resources>
<dimen name="titleSize">20sp</dimen>
</resources>
但是当我试图获得这个值时
Resources r = getResources();
tvTitleSize = r.getDimension(R.dimen.titleSize);
tvTitleSize等于40,这是大的。为什么价值是原价的两倍,我该如何解决?
Ps:我的设备是galaxy nexus。
答案 0 :(得分:3)
如果你阅读docs of Resource.getDimension()
方法,你会发现:
资源维度值乘以适当的指标。
换句话说,您将获得设备的实际大小(以像素为单位)。
sp是密度无关的值。该值对应于mdpi,但Galaxy Nexus是xhdpi,其密度是mdpi的两倍。这就是为什么你得到20 * 2 = 40;
如果你想知道什么是错的,那么答案就是什么。你得到的大小是正确的。 ldpi / mdpi / hdpi / xhdpi设备的实际文本大小不同。
所以例如16dp意味着:
sp
和dp
之间的区别在于sp
受用户对字体大小的偏好的影响。
答案 1 :(得分:1)
您获得的值以像素为单位。高密度屏幕上的20sp
对应的像素数多于低密度屏幕上的像素数。 Android会为您完成转换。