Java 针对不同的屏幕密度使用不同的字体

Java 针对不同的屏幕密度使用不同的字体,java,android,Java,Android,我正在我的Nexus5设备上开发一个Android应用程序(~445ppi),我在应用程序的一些部分使用RobotoLight作为字体。 当显示在我的设备上时,Roboto Light文本看起来干净而清晰,但是当在屏幕像素密度较低的设备上测试应用程序时,Roboto Light看起来非常糟糕(粗体字体看起来不错) 告诉我的应用程序在高密度屏幕上使用Roboto Light,在低密度屏幕上使用另一种字体,最好和最快的方法是什么?我的第一个想法是创建不同的值目录(值mdpi、值hdpi、值xhdpi

我正在我的Nexus5设备上开发一个Android应用程序(~445ppi),我在应用程序的一些部分使用RobotoLight作为字体。 当显示在我的设备上时,Roboto Light文本看起来干净而清晰,但是当在屏幕像素密度较低的设备上测试应用程序时,Roboto Light看起来非常糟糕(粗体字体看起来不错)


告诉我的应用程序在高密度屏幕上使用Roboto Light,在低密度屏幕上使用另一种字体,最好和最快的方法是什么?我的第一个想法是创建不同的
目录(值mdpi、值hdpi、值xhdpi…),用相同的键在每个目录中放置一个
strings.xml
,并为其分配我希望用于每个密度的字体文件名,然后使用该字符串加载字体。。。不过,这看起来有点复杂,我想知道是否有更简单的方法。

您可以通过

浮动密度=getResources().getDisplayMetrics().density

这将为您提供:

0.75-ldpi

1.0-mdpi

1.5-hdpi

2.0-xhdpi

3.0-xxhdpi

4.0-xxxhdpi

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

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

DisplayMetrics=getResources().getDisplayMetrics()

int densityDpi=(int)(metrics.density)

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

Typeface font=Typeface.createFromAsset(getAssets(),“/fonts/Avenir.ttf”)

textView.setTypeface(字体)

这就是我最终要做的(我创建了一个新的静态方法,该方法通过显示密度返回从资产创建的字体对象)。谢谢