Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在运行时使用xml中的维度以编程方式设置文本大小?_Android_Textview_Dimensions - Fatal编程技术网

Android 如何在运行时使用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

在dimens.xml中,我有:

<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
来代替呢?@dphans
Resources.getDimension()
方法返回已经乘以适当值的值metric@pkuszewski哇,真让人困惑。
textView.setTextSize(size)
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.text_medium));