skiptools / skiptools/skip-ui

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

Open
#456 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Swift
Stars
330
Forks
76
Avg merge
3h 6m
Merged PRs (30d)
1

Description

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)

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by tracing SkipUI Text into the Android host Activity/Configuration and Compose density handling, focusing on Settings.System.font_scale and fontScale. Compare the behavior at 1.0 and 1.5, then document whether scaling is intentionally pinned, whether an opt-in exists, and whether dynamicTypeSize(_:) remains unavailable or has a planned path.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, swift
Domain
accessibility, frontend, mobile
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.