Flutter中的fontSize和textScaleFactor有什么区别?

时间:2018-09-02 15:42:09

标签: flutter

fontSize的默认值为14.0。因此,如我的代码示例所示,textScaleFactor: 2.0似乎与fontSize: 28.0相同:

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Title')),
        body: Row(
          children: <Widget>[
            new Text("Jane", textScaleFactor: 2.0),
            new Text(" Doe", style: new TextStyle(fontSize: 28.0)),
          ],
        )
      )
    );
  }
}

enter image description here

优缺点是什么?在特定情况下何时使用一种或另一种有什么建议?

4 个答案:

答案 0 :(得分:3)

它们之间的渲染没有区别。他们的目的是什么变化。

字体大小通常是每个组件的值。而比例因子更全球化。您可以直接在Text上覆盖比例因子这一事实只是一个奖励。

在典型的应用程序中,您将具有以下内容:

MediaQuery(
  data: MediaQuery.of(context).copyWith(textScaleFactor: 2.0),
  child: Whatever(
    child: Text("Foo", style: Theme.of(context).textTheme.headline),
  ),
);

基本上,将textScaleFactor作为缩放选项。字体大小用于将标题与内容分开。

答案 1 :(得分:2)

据我了解,textScaleFactor用于辅助功能。

有一个Android系统选项可以增加文本大小(而不是总体UI比例)。

似乎没有技术差异。

来自TextStyle文档:

  /// During painting, the [fontSize] is multiplied by the current
  /// `textScaleFactor` to let users make it easier to read text by increasing
  /// its size.

答案 2 :(得分:1)

字体大小实际上是程序员在其应用程序中给出的大小,并且不会随用户设置而改变。

例如:-

Text('Always the same size!', style: TextStyle(fontSize: 20));

无论用户在其中进行了什么更改,此文本始终具有20个设备像素的大小
    他/她的设备设置。

现在看看TextScaleFactor如何影响此场景。...

final scaleFactor = MediaQuery.of(context).textScaleFactor;
Text('This changes!', style: TextStyle(fontSize: 20 * scaleFactor));

如果用户未更改设置中的任何内容,则此文本的大小也为20(因为textScaleFactor默认为1)。但是,如果进行了更改,则该文本的字体大小将遵守用户设置。

答案 3 :(得分:-3)

fontSize 只是一个普通大小,您给它15.0,它将是15.0像素

但是 textScaleFactor 每个逻辑像素的字体像素数。

例如,如果文本比例因子为1.5,则文本将比指定的字体大小大50%。在这种情况下:15.0像素+(15.0 * 0.5像素)= 15.0像素+ 7.5像素= 22.5像素

如果您未指定textScaleFactor,则默认值为1