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

Same text size but it larger on other devices

我有一个 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 上的外观

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

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

阅读 Android 关于不同密度设备的开发人员指南后,我预计如果我在具有更高 dpi 的设备上使用相同的文本大小,文本会更小。但是现在有个情况我实在是搞不懂。

试试这个,在你的 xml 中添加这个 属性。它将根据所有 phone.

更改文本大小
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 */

希望你的问题能得到解决。

如果您使用 sp 中的值并且用户从设置--->显示---->TextSize 更改了他设备的默认文本大小,您的 TextViews 受到影响。另一方面,如果您使用 dp 值,那么无论用户将什么文本大小设置为默认值,您应用中的 TextView 都将保持不变。 Google 当然不鼓励这样做,因为这是一种不好的做法,因为用户应该能够更改文本大小,但这正是您要查找的内容。

因此,使用 (TypedValue.COMPLEX_UNIT_DIP,number of your choosing) 而不是 (TypedValue.COMPLEX_UNIT_SP, sp)

您可以将 dimens 文件添加到您的资源中。我就是这样做的

这是我得到答案的link

The primary difference between an sp and a dp is that sp’s preserve a user's font settings. Users who have larger text settings for accessibility will see font sizes match their text size preferences.

所以你可以检查两个设备的设置,看看它们之间是否存在差异。

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

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

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