1

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

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

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

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

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

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

4

5 回答 5

1

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

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

于 2018-11-21T11:48:53.393 回答
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 */

希望你的问题能解决。

于 2018-11-21T11:44:01.707 回答
0

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.

so you could check the settings of two devices and see if there is a difference between them. enter image description here

于 2018-11-21T12:41:51.123 回答
0

您可以将尺寸文件添加到您的资源中。我就是这样做的在此处输入图像描述

这是我得到答案的链接

于 2018-11-21T11:50:23.257 回答
0

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

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

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

于 2019-05-20T11:32:32.743 回答