我有一个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更高的设备上使用相同的文本大小,则文本会更小。但是现在我真的不明白这种情况。
答案 0 :(得分:1)
如果您正在使用sp
中的值,并且用户从“设置”->“显示---->” TextSize更改了设备的默认文本大小,则您的TextViews 将为受到影响。另一方面,如果您使用dp
值,则无论用户将默认文本大小设置为什么,应用程序中的TextView都将保持不变。当然,Google不建议您这样做,因为用户应该可以更改文本大小,但这正是您要查找的。 p>
因此,使用(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)
link就是我的答案
答案 3 :(得分:0)
答案 4 :(得分:0)
对于这个问题,我仍然没有找到正确的解释。我唯一的理论是下一个:
有密度桶(120 dpi,160 dpi,240 dpi,320 dpi,480 dpi,640 dpi)。设备的屏幕密度将确定为最接近的值区。例如,如果您的设备具有401 dpi,它将被计为480 dpi。因此,当我创建并添加大小为20 dp的视图时,它将转换为比所需更多的pixels
。对于密度恰好在两个存储桶之间的设备,这是最难的。我还检查了所有显示错误图像的设备的密度(例如在image 2
上),并且密度几乎在两个存储桶之间……
我仍然不知道为什么只有在动态创建和添加视图时才会发生这种情况,但是解决此问题的唯一方法是使用所有预设视图创建单独的布局,而不是动态添加这些视图。