代码之家  ›  专栏  ›  技术社区  ›  Favor

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

  •  4
  • Favor  · 技术社区  · 7 年前

    我开了一个 原生Android 应用程序 颤振 同一设备上的Android应用程序,并对两个应用程序进行了截图:

    Screenshots of the Java (left) and Flutter (right) applications

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

    这个 Java本机应用程序适应 并显示自定义的三星Galaxy字体,而 .

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

    1 回复  |  直到 5 年前
        1
  •  3
  •   ibhavikmakwana    6 年前

    创建 PlatformChannels 对于 TextView 进入这个安卓系统 文本框 你的颤振应用程序。 用它代替 Text 颤振的小部件。

    看看这个 Article 更多信息。

        2
  •  1
  •   DongXu    6 年前

    在Flutter中,Android的默认字体是Roboto,iOS的默认字体是.SF UI-Pro和.sfui-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;
        }