从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,这样可以保存你的生活