Skip to content

Does SkipUI Text honor the Android system font-size setting (Dynamic Type / fontScale)? #456

@vincentborko

Description

@vincentborko

Does SkipUI Text honor the Android system font-size setting (Dynamic Type / fontScale)?

Summary

In a SkipFuse app, SkipUI Text does not appear to change size when the Android system font-size setting ("Display → Font size", i.e. Settings.System.font_scale) changes. As a result, Dynamic Type modifiers such as dynamicTypeSize(_:) (and, I suspect, @ScaledMetric) have nothing to act on. I'd like to understand whether this is intentional before building on top of it.

Repro

  1. A simple screen with a few Text(...).font(.title) rows.
  2. Set the system font scale and relaunch so it reflows:
    adb shell settings put system font_scale 1.5
    adb shell am force-stop <app-id>
    
  3. Launch and compare against font_scale 1.0.

Observed: the text renders at the same size at 1.5 as at 1.0. A row with no modifier renders at the same size as a row with a Dynamic-Type cap applied.

Expected (iOS / typical Compose): Compose lays text out in sp, which normally scales with LocalDensity.fontScale, so the unconstrained text would grow at 1.5×.

Consequence

Because the base text never scales with the system setting, dynamicTypeSize(...) — which is a cap on Dynamic Type growth — is effectively a no-op on Android: there is no growth to clamp. (dynamicTypeSize(_:) is currently @available(*, unavailable) anyway; this is about whether implementing it would be meaningful.)

Questions

  1. Is the Compose density fontScale intentionally pinned (e.g. the host Activity/Configuration forces fontScale = 1f) so that Skip apps ignore the system font-size setting — presumably to keep layouts stable, matching fixed iOS sizing?
  2. If so, is there a supported way to opt in to system font scaling, so the app can respect the user's accessibility font-size preference?
  3. Given the above, should dynamicTypeSize(_:) stay @available(*, unavailable), or is honoring Dynamic Type on Android on the roadmap?

Environment

  • skip-ui 1.55.0, skip-fuse-ui 1.16.0
  • Android emulator, API 36 (Android 16)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions