Inconsistent Font Sizes Across Devices and Languages – Any Solution?

Hi everyone,

I'm currently rebuilding an app, and to support as many devices as possible, I thought I'd use the built-in system fonts.
But to my surprise, I noticed that the font size seems to vary not only depending on the watch model, but also on the selected language!

Even for the same screen resolution (e.g. 280x280), the combination of model and language can lead to drastically different layouts.
This makes it really hard to get a consistent and harmonious rendering across devices.

So I have two questions:

  1. Is there any way to force a watchface to use a specific language's font, without changing the entire device language?

  2. If not, is there a way to lock in a specific font version (from a given model/language combo) to ensure a stable and predictable rendering, instead of testing endless combinations?

Thanks in advance for any tips or experience you can share!

Have a great day,

  • It's a ROYAL PAIN IN THE ASS!

    No viable solution other than coding around it Disappointed. Well, at least on the newer devices some support vector fonts but even then they are are not consistent Angry

  • It's actually gotten a bit better over the years, but as someone that started writing apps in 2015 and currently have apps that support about every device, there are a few things I've done over the years,  I use dc calls instead of layouts.  Then in onLayout I use things like the screen shape, width and height and the font heights (dc.getFontHeight()) to determine which font to use and the x/y for drawing things.  It's a bit of a pain when you just start, but over time, you can be at the point where adding a new target device only needs trivial changes, if any

    If you look at the API, there are the FONT_* and FONT_SYSTEM_* defined, and when this was first added, the idea was the FONT_SYSTEM_* where what was native to device and the FONT_* were a common one between devices for CIQ apps, but that plan never went anywhere but the names are still there so things that used FONT_SYSTEM_* names would break.

    So today things like FONT_MEDIUM and FONT_SYSTEM_MEDIUM are the same.

  • if the text is known (aka ASCII) then you could use a custom font. It's still lot of work, but at least you know what the user sees. If part of the text comes from user input then maybe it's not the best, as then in languages that use non Latin alphabet the user will have problems

  • With regard to even worse problems as incorrect measurements I left fonts on places where things matter and only use graphics. Atm comparing battery usage with my previous font based solution, but technically it's a big relief.