如何让Flutter使用设备的默认字体?

问题描述 投票:5回答:1

我在同一台设备上打开了一个Java原生Android应用程序和一个Flutter Android应用程序,并截取了两个应用程序的屏幕截图:

如您所见,他们用来显示文字的字体是不同的。 这两个应用程序都使用Samsung Galaxy S5 Choco Cooky默认主题运行。

Java本机应用程序适应并显示自定义Samsung Galaxy字体,而Flutter应用程序不调整字体。

如何配置我的Flutter应用程序以使用设备的默认字体?

android dart flutter
1个回答
2
投票

PlatformChannels创建一个TextView,并将这个Android TextView访问到您的Flutter应用程序中。并使用它代替Flutter的Text小部件。

查看此Article了解更多信息。


1
投票

在Flutter中,Android上的默认字体是Roboto,在iOS上是.SF UI Pro和.SF UI Text。

看看这个答案https://stackoverflow.com/a/56339147/1776125

在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;
    }
© www.soinside.com 2019 - 2024. All rights reserved.