文字大小相同,但在其他设备上则更大

时间:2018-11-21 11:37:58

标签: android textview density-independent-pixel screen-density

我有一个TextView,我以编程方式在“ SP”中设置了文字大小。

tv.setTextSize(spToPx(5, context));

public static int spToPx(float sp, Context context) {
    return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
}

第一个屏幕截图显示了它的外观(以及在我的小米Redmi和Doogee HT7上的外观

First screenshot shows how it should look (and how it looks on my Xiaomi Redmi and Doogee HT7)

第二张屏幕截图显示了在更高或相同dpi的其他设备上的外观。

Second screenshot shows how it looks on other devices with higher or the same dpi.

通常,如果我理解正确,则在'dp'或'sp'中具有相同大小的文本在其他设备(具有相同的屏幕大小)上应该看起来相同,因为它会自动将'dp'或'sp'转换为所需的像素数量取决于dpi。

在阅读有关密度不同的设备的Android开发人员指南后,我期望如果在dpi更高的设备上使用相同的文本大小,则文本会更小。但是现在我真的不明白这种情况。

5 个答案:

答案 0 :(得分:1)

如果您正在使用sp中的值,并且用户从“设置”->“显示---->” TextSize更改了设备的默认文本大小,则您的TextViews 将为受到影响。另一方面,如果您使用dp值,则无论用户将默认文本大小设置为什么,应用程序中的TextView都将保持不变。当然,Google不建议您这样做,因为用户应该可以更改文本大小,但这正是您要查找的。

因此,使用(TypedValue.COMPLEX_UNIT_DIP,number of your choosing)代替(TypedValue.COMPLEX_UNIT_SP, sp)

答案 1 :(得分:0)

尝试此操作,将此属性添加到xml中。它将根据所有电话更改文本大小。

style="@android:style/TextAppearance.DeviceDefault.Medium" /*for normal text */
style="@android:style/TextAppearance.DeviceDefault.Small" /*for small text */
style="@android:style/TextAppearance.DeviceDefault.Large" /*for large text */

希望您的问题能够解决。

答案 2 :(得分:0)

您可以将dimens文件添加到资源中。那就是我的做法enter image description here

link就是我的答案

答案 3 :(得分:0)

  

sp和dp之间的主要区别是sp保留了   用户的字体设置。具有较大文本设置的用户   可访问性将看到字体大小与其文本大小首选项相匹配。

,因此您可以检查两个设备的设置,看看它们之间是否存在差异。 enter image description here

答案 4 :(得分:0)

对于这个问题,我仍然没有找到正确的解释。我唯一的理论是下一个:

有密度桶(120 dpi,160 dpi,240 dpi,320 dpi,480 dpi,640 dpi)。设备的屏幕密度将确定为最接近的值区。例如,如果您的设备具有401 dpi,它将被计为480 dpi。因此,当我创建并添加大小为20 dp的视图时,它将转换为比所需更多的pixels。对于密度恰好在两个存储桶之间的设备,这是最难的。我还检查了所有显示错误图像的设备的密度(例如在image 2上),并且密度几乎在两个存储桶之间……

我仍然不知道为什么只有在动态创建和添加视图时才会发生这种情况,但是解决此问题的唯一方法是使用所有预设视图创建单独的布局,而不是动态添加这些视图。