Font size difference caused by Android font size settings

Hi!

I’m developing an app and I’m using Android to test the app. While testing with a couple of devices I found out that some devices had different font sizes. After some searching I noticed these devices had their font size settings in Android set to small font. I’ve been searching if there’s a way to set the font size to a fixed amount but haven’t been able to find out how.

I’ve made two screenshots, one with a small font size and one with a normal font size.

Does anyone know how I can set the font size to a fixed amount or how to prevent the font sizes from changing depending on the phone settings? Thanks!

I have this problem,too.
How can i solve this issue?? font size to fix??

I am also struggling with this - surely it can’t be a new use case and there MUST be a way of disabling the app responding to system base font size changes?

I found the solution using a cordova plugin to disable the user preferred text zoom.

You can find the plugin here: https://github.com/phonegap/phonegap-mobile-accessibility and add in the platform ready event:

platform.ready().then(() => {
    [...]
    if(window.MobileAccessibility){
       window.MobileAccessibility.usePreferredTextZoom(false);
    }
    [...]
});
7 Likes

thanks man, saved me some trouble!

The UI didn’t scale well on small screen-dimensional phones and modified the whole user interface when an app set’s “Huge” accessibility choices looked stupid.
What I did was put the following code below in my BaseActivity (an Activity class that all my activities extend from)

public void adjustFontScale(Configuration configuration) {
    if (configuration.fontScale > 1.30) {
        LogUtil.log(LogUtil.WARN, TAG, "fontScale=" + configuration.fontScale); //Custom Log class, you can use Log.w
        LogUtil.log(LogUtil.WARN, TAG, "font too big. scale down..."); //Custom Log class, you can use Log.w
        configuration.fontScale = (float) 1.30;
        DisplayMetrics metrics = getResources().getDisplayMetrics();
        WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        wm.getDefaultDisplay().getMetrics(metrics);
        metrics.scaledDensity = configuration.fontScale * metrics.density;
        getBaseContext().getResources().updateConfiguration(configuration, metrics);
    }
}

And called it right after my super.onCreate() like so

adjustFontScale(getResources().getConfiguration());

What this code does is identify whether the user sets its font scale to more than 1.30f (1.30f is “large” on Note 5 but probably varies somewhat from one device to the next). If your user sets your font too big (“Extra Large,” “Huge”…) we just size the app to “Large.”

Other Tip:
You can set their width / height with sp instead of classical dp if you want certain layouts to scale with your custom fonts ( weird font text) (say, a Relative Layout that is used to build backdrop to your fonts). The layout changes with the fonts on your application when a user changes their font size. Nice little trick.-Nice little trick.

1 Like