我在同一台设备上打开了一个Java原生Android应用程序和一个Flutter Android应用程序,并截取了两个应用程序的屏幕截图:
如您所见,他们用来显示文字的字体是不同的。 这两个应用程序都使用Samsung Galaxy S5 Choco Cooky默认主题运行。
Java本机应用程序适应并显示自定义Samsung Galaxy字体,而Flutter应用程序不调整字体。
如何配置我的Flutter应用程序以使用设备的默认字体?
为PlatformChannels
创建一个TextView
,并将这个Android TextView
访问到您的Flutter应用程序中。并使用它代替Flutter的Text
小部件。
查看此Article了解更多信息。
在Flutter中,Android上的默认字体是Roboto,在iOS上是.SF UI Pro和.SF UI Text。
在iOS上这没关系,但在Android上有很多ROM具有不同的默认字体系列。
为了获得设备的默认字体系列,我在Android上编写了一个平台频道,这里是获取设备默认字体系列的代码:
private String getDefaultFont() {
File configFilename = new File("/system/etc/system_fonts.xml");
// sans-serif is the default font family name in Android SDK, check out the code in Typeface.java
String defaultFontName = "sans-serif";
try {
FileInputStream fontsIn = new FileInputStream(configFilename);
XmlPullParser parser = Xml.newPullParser();
parser.setInput(fontsIn, null);
boolean done = false;
boolean getTheText = false;
int eventType;
while (!done) {
eventType = parser.next();
if (eventType == parser.START_TAG && parser.getName().equalsIgnoreCase("name")) {
getTheText = true;
}
if (eventType == parser.TEXT && getTheText) {
// first name
defaultFontName = parser.getText();
done = true;
}
if (eventType == parser.END_DOCUMENT) {
done = true;
}
}
} catch (RuntimeException e) {
System.err.println("Didn't create default family (most likely, non-Minikin build)");
} catch (FileNotFoundException e) {
System.err.println("GetDefaultFont: config file Not found");
} catch (IOException e) {
System.err.println("GetDefaultFont: IO exception: " + e.getMessage());
} catch (XmlPullParserException e) {
System.err.println("getDefaultFont: XML parse exception " + e.getMessage());
}
return defaultFontName;
}