如何支持 Flutter 中的文本大小可访问性,例如 Android sp size 和 iOS Dynamic Type

How to support text size accessibility in Flutter like Android sp size and iOS Dynamic Type

在 Android 中,您可以使用与比例无关的像素 (sp) 设置字体大小,以考虑到在设置中选择的 user font size preferences

android:textSize="26sp"

在 iOS 中,您可以使用 Dynamic Type 来做类似的事情。

label.font = UIFont.preferredFont(forTextStyle: .body)
label.adjustsFontForContentSizeCategory = true

你如何在 Flutter 中做同样的事情?

Flutter 默认内置 accessibility support for larger fonts。您可以通过指定 textScaleFactor 来覆盖此行为,Flutter 通常使用它来应用用户选择的文本大小。

您可以通过比较两个文本小部件来测试它,第二个 textScaleFactor 设置为 1.0。它们的默认字体大小都是 14.0 逻辑像素。

Widget _myWidget() {
  return Column(
    mainAxisAlignment: MainAxisAlignment.center,
    children: <Widget>[
      Text('Some sample text'),
      Text('Some sample text', textScaleFactor: 1.0),
    ],
  );
}

你可以这样得到当前的文本比例因子:

final scale = MediaQuery.of(context).textScaleFactor;

Android

在 Android 设置中 辅助功能 > 字体大小 选择最小的大小。

再做一次,选择最大的尺寸。

请注意,第一个文本小部件文本更改了大小,但第二个具有 textScaleFactor 覆盖的小部件没有。

iOS

在 iOS 中转到 设置 > 通用 > 辅助功能 > 较大的文本 并选择最小的选项。

再次使用最大设置: