android - 为什么同一个pt在不同设备下显示不同大小
问题描述
我希望不同设备的字体大小完全一样,所以我选择使用pt。
但是用很多不同分辨率的虚拟设备尝试找一样的PT显示字体大小是不一样的
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById(R.id.textView);
String tx = "123456";
tv.setText(tx);
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, pt2px(this, 50));
tv.setBackgroundColor(Color.RED);
tv.setGravity(Gravity.CENTER);
}
public static int pt2px(Context context, float ptValue) {
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(dm);
final float fontScale = dm.xdpi;
return (int) (ptValue * (fontScale / 72f) + 0.5f);
}
}
谢谢你的回答!
我找到了原因,因为DisplayMetrics得到的DPI是设备厂商自己设置的,不一定准确。SP和PX之间的转换需要scaledDensity,这个值也是不准确的,所以在同一个SP下得到的一些设备的字体大小也不同。 https://rschilling.wordpress.com/2011/02/03/android-screen-density-inaccuracies/
但我还没有找到解决办法。
解决方案
请使用 sp。作为一个必须使用老花镜阅读 facebook 警报的人,我求求你了。由于纵横比等原因,您将从不同的设备获得不同的结果。像素密度不必像您所看到的那样在每个方向上都相同,并且您正在混合术语。dpi 具体是如何打印的。ppi 是像素密度。不要假设 dpi 与您的屏幕有任何关系,因为它没有。反正不是直接的。如果你将它设置在你要在屏幕上显示的东西上,它可以而且通常确实会被缩放。这特别适用于文本,因为 android 中有一个内置设置来缩放(或缩小)它,任何体面的阅读器应用程序也可以让你捏缩放。
推荐阅读
- c++ - 模板类返回元组或值,取决于参数包
- ios - ITMS-90561:无效的 Swift 支持 - watchOS 应用程序在两者都有 Swift 库 - Xcode 12
- javascript - Cloud Function 的运行速度比我需要的要快
- javascript - 表单组中的嵌套数组给出错误:this.validator 不是函数
- spring - 运行 Spring 测试时如何修复 H2 插件(版本 1.4.200)的错误:JdbcSQLSyntaxErrorException:找不到列“start_value”
- javascript - JS函数不返回任何结果的问题
- python - 使用不同长度的其他列表对列表进行排序
- node.js - Npm 安装进程正在寻找 NVM 文件夹
- python - 检查熊猫数据框中没有相同值的对
- php - 如何在 Laravel 6 中进行多个子查询?