В чем разница между fontSize и textScaleFactor во Flutter? - PullRequest
0 голосов
/ 02 сентября 2018

По умолчанию для 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 голосов
/ 03 августа 2019

Размер шрифта на самом деле - это размер, который задается программистом в его приложении и не изменяется в зависимости от настроек пользователя.

например: -

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). Но если были внесены изменения, размер шрифта этого текста соответствует настройкам пользователя.

0 голосов
/ 02 сентября 2018

fontSize - это просто обычный размер, вы даете ему 15,0, это будет 15,0 пикселей

но textScaleFactor количество пикселей шрифта для каждого логического пикселя.

Например, если коэффициент масштабирования текста равен 1,5, текст будет на 50% больше указанного размера шрифта. в этом случае: 15.0 px + (15.0 * 0.5 px) = 15.0 px + 7.5 px = 22.5px

Если вы не указали textScaleFactor, значением по умолчанию будет 1

0 голосов
/ 02 сентября 2018

Нет никакой разницы между ними в рендеринге. Какие изменения являются их целью.

Размер шрифта обычно является значением для каждого компонента. Пока масштабный фактор более глобален. Тот факт, что вы можете переопределить масштабный коэффициент непосредственно на Text, является лишь бонусом.

В вашем типичном приложении у вас будет следующее:

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

В принципе, рассмотрите textScaleFactor в качестве опции увеличения. Хотя font-size используется для отделения заголовка от его содержимого.

0 голосов
/ 02 сентября 2018

Насколько я понимаю, textScaleFactor используется для доступности.

Существует системная опция Android, которая увеличивает размер текста (не общий масштаб пользовательского интерфейса).

Похоже, нет технической разницы.

Из TextStyle документов:

  /// During painting, the [fontSize] is multiplied by the current
  /// `textScaleFactor` to let users make it easier to read text by increasing
  /// its size.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...