首页 > 解决方案 > 为什么同一个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);
    }
}

1

2

谢谢你的回答!

我找到了原因,因为DisplayMetrics得到的DPI是设备厂商自己设置的,不一定准确。SP和PX之间的转换需要scaledDensity,这个值也是不准确的,所以在同一个SP下得到的一些设备的字体大小也不同。 https://rschilling.wordpress.com/2011/02/03/android-screen-density-inaccuracies/

但我还没有找到解决办法。

标签: android

解决方案


请使用 sp。作为一个必须使用老花镜阅读 facebook 警报的人,我求求你了。由于纵横比等原因,您将从不同的设备获得不同的结果。像素密度不必像您所看到的那样在每个方向上都相同,并且您正在混合术语。dpi 具体是如何打印的。ppi 是像素密度。不要假设 dpi 与您的屏幕有任何关系,因为它没有。反正不是直接的。如果你将它设置在你要在屏幕上显示的东西上,它可以而且通常确实会被缩放。这特别适用于文本,因为 android 中有一个内置设置来缩放(或缩小)它,任何体面的阅读器应用程序也可以让你捏缩放。


推荐阅读