从XML获取维度并在运行时设置文本大小
在dimens.xml中,我有:
<dimen name="text_medium">18sp</dimen>
在运行时,我得到这个值并设置文本视图的文本大小:
int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium); textView.setTextSize(size).
在一个10“的平板(1280×800),一切都很好, 但在手机(800 x 480),文本视图有一个非常大的字体。 在平板电脑上,尺寸等于18; 在电话里,是27。
如果我手动设置大小:
textView.setTextSize(size)
这两个设备的大小是正常的。
<dimen name="text_medium">18sp</dimen>
在代码中设置大小:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));
getDimensionPixelSize()和getDimension()都使用屏幕密度来计算像素。 您的手机屏幕密度显然是hdpi(240dpi),所以它使用1.5的规模转换DP为SP。 简单的math18 * 1.5 = 27。
看来你的平板电脑的密度是mdpi(160dpi),所以比例只有1:1。
但是,如果您比较两个文本的实际大小,它应该是相同的。
最好的方法是在values文件夹中创build两个dimens.xml文件,另一个值为tablet-sw600dp(也可以使用values-sw720dp-land文件夹以横向方式存储10英寸平板电脑的尺寸)。
您可以在Android中阅读有关维度的更多信息: http : //android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/
你可以使用sdp(Scalable desnsity pixels)来代替dp,这样可以保存你的生活