Android 如何在运行时使用xml中的维度以编程方式设置文本大小?
在dimens.xml中,我有:Android 如何在运行时使用xml中的维度以编程方式设置文本大小?,android,textview,dimensions,Android,Textview,Dimensions,在dimens.xml中,我有: <dimen name="text_medium">18sp</dimen> 在10英寸的平板电脑(1280 x 800)上,一切正常;但在手机(800 x 480)上,文本视图的字体非常大。在平板电脑上,大小等于18;电话号码是27 如果我通过以下方式手动设置大小: textView.setTextSize(size) 两台设备上的尺寸都正常。在dimens.xml中添加尺寸: <dimen name="tex
<dimen name="text_medium">18sp</dimen>
在10英寸的平板电脑(1280 x 800)上,一切正常;但在手机(800 x 480)上,文本视图的字体非常大。在平板电脑上,大小等于18;电话号码是27
如果我通过以下方式手动设置大小:
textView.setTextSize(size)
两台设备上的尺寸都正常。在dimens.xml中添加尺寸:
<dimen name="text_medium">18sp</dimen>
getDimensionPixelSize()和getDimension()两种方法都使用屏幕密度来计算像素。您的手机屏幕密度显然是hdpi(240dpi),因此它使用1.5的刻度将dp转换为sp。简单数学18*1.5=27 您的平板电脑密度似乎是mdpi(160dpi),所以比例仅为1:1 但如果你比较两个文本的实际大小,它应该是相同的 最好的方法是创建两个dimens.xml文件,一个在手机的values文件夹中,另一个在平板电脑的values-sw600dp文件夹中(您也可以使用values-sw720dp-land文件夹以横向方式存储10英寸平板电脑的尺寸)
您可以在以下位置阅读更多关于Android中维度的信息:您可以使用sdp(可缩放的密度像素)代替dp,这肯定会拯救您的生命以扩展Kostek Poland的答案 文本大小未按预期显示的原因是:
int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
getDimensionPixelSize()将“18sp”转换为像素大小,因此返回的值与18不同。例如,假设该方法返回值23。因此,当执行该行时:
textView.setTextSize(size)
该方法将文本大小设置为23sp,因此文本大小将比预期的大
解决方案是在设置文本大小时使用此行:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));
这是因为第一个参数声明第二个参数的类型为pixel。因此,如果第二个参数是23,那么它将不会被视为23sp,而是指23像素,相当于18sp,但以像素为单位。我不知道OP,但这是我一直在寻找的答案。我使用的是复杂的单位,我需要指定输入类型,而不是输出类型。当我获得字体大小(在sp中定义)时,我得到60。当我用OMPLEX_-UNIT_-PX把它放回去,然后重新取回时,我得到了70。这里的文本大小似乎不是很清楚,为什么我不能使用
TypedValue.COMPLEX\u UNIT\u SP
来代替呢?@dphansResources.getDimension()
方法返回已经乘以适当值的值metric@pkuszewski哇,真让人困惑。
textView.setTextSize(size)
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));