为不同的屏幕密度使用不同的字体

时间:2014-09-03 11:04:24

标签: java android

我正在我的Nexus 5设备(~445 ppi)上开发Android应用程序,我正在使用Roboto Light作为应用程序中几个部分的字体。 当在我的设备中显示时,Roboto Light文本看起来干净利落,但是当在具有较低像素密度的屏幕的设备上测试应用程序时,Roboto Light看起来非常糟糕(更大胆的字体看起来很好)。

告诉我的应用在高密度屏幕上使用Roboto Light以及在低密度屏幕上使用另一种字体的最佳和最快捷方式是什么?我的第一个想法是创建不同的values目录(values-mdpi,values-hdpi,values-xhdpi ...),在每个目录中放置strings.xml并使用相同的密钥并为其指定字体的文件名我希望使用每个密度,然后使用该字符串加载字体...但是这看起来有点复杂,我想知道是否有更简单的方法。

2 个答案:

答案 0 :(得分:1)

DisplayMetrics metrics = getResources()。getDisplayMetrics();

int densityDpi =(int)(metrics.density)

取决于您的密度,您可以将字体类型设置为textview,其他控件如下面的代码使用

字体font = Typeface.createFromAsset(getAssets(),“/ font / Avirir.ttf”);

textView.setTypeface(字体);

答案 1 :(得分:0)

您可以通过

以编程方式执行此操作
  

float density = getResources()。getDisplayMetrics()。density;

     

这会给你:

     

0.75 - ldpi

     

1.0 - mdpi

     

1.5 - hdpi

     

2.0 - xhdpi

     

3.0 - xxhdpi

     

4.0 - xxxhdpi

     

Source

然后检查密度并采取相应措施:

if (density >= 2.0) {
    textView.setTypeface(Typeface.SANS_SERIF);
} else {
    textView.setTypeface(Typeface.SANS_SERIF,Typeface.BOLD);
}