【问题标题】:Same text size but it larger on other devices相同的文字大小,但在其他设备上更大
【发布时间】:2019-04-23 23:22:58
【问题描述】:

我有一个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 的设备上使用相同的文本大小,文本会更小。但是现在我遇到了一个我真的不明白的情况。

【问题讨论】:

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


【解决方案1】:

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

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

【讨论】:

  • 以前我用'dp',但效果一样。
【解决方案2】:

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

这是我得到答案的link

【讨论】:

  • 但是有一个问题是dpi更高,文字看起来也更大。但它不应该是这样的。对 Android 指南的引用和您的回答文本应该更小,这就是为什么我们必须创建尺寸文件并在那里定义更多的“sp”以获得更高的 dpi。
【解决方案3】:

试试这个,在你的 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 */

希望你的问题能解决。

【讨论】:

  • 感谢您的回答。但这究竟是什么意思?我真的很想至少了解像素级别的情况:)
  • 它将根据所有设备使用中等文本大小。不要使用 textSize 属性。
  • 但是我在某处使用大文本,某处小,某处中等,如屏幕截图。在所有情况下,其他设备的文本都比应有的大。如果我会使用你的答案,它会设置所有 TextViews 具有相同的文本大小?
  • 对小文本使用TextAppearance.DeviceDefault.Small,对大文本使用TextAppearance.DeviceDefault.Large
【解决方案4】:

sp 和 dp 的主要区别在于 sp 保留 a 用户的字体设置。具有较大文本设置的用户 可访问性将看到字体大小与他们的文本大小偏好相匹配。

这样您就可以检查两个设备的设置,看看它们之间是否存在差异。

【讨论】:

  • 我之前试过'dp',效果一样。另外,如果应用用户有不同的文本大小设置,作为开发人员我可以做些什么来为所有人创建相同的文本大小?
【解决方案5】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-10-28
    • 2015-10-29
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 2020-03-10
    • 2019-09-23
    • 1970-01-01
    • 2012-09-09
    相关资源
    最近更新 更多