how to prevent system font-size changing effects to android application?

后端 未结 8 2206
执笔经年
执笔经年 2020-11-27 03:49

I recently finished developing my android application. I used sp (Scaled pixels) for all textSize. The problem is when i adjusted the system font-size, my application\'s fon

8条回答
  •  抹茶落季
    2020-11-27 04:05

    That's how we do it. In Application class override onConfigurationChanged() like this. If you want different behavior for different activities - override onConfigurationChanged() in Activity.

    Don't forget to add manifest tag android:configChanges="fontScale" since you are hadnling this configuration change yourself.

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    
        // In some cases modifying newConfig leads to unexpected behavior,
        // so it's better to edit new instance.
        Configuration configuration = new Configuration(newConfig);
        SystemUtils.adjustFontScale(getApplicationContext(), configuration);
    }
    

    In some helper class we have adjustFontScale() method.

    public static void adjustFontScale(Context context, Configuration configuration) {
        if (configuration.fontScale != 1) {
            configuration.fontScale = 1;
            DisplayMetrics metrics = context.getResources().getDisplayMetrics();
            WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
            wm.getDefaultDisplay().getMetrics(metrics);
            metrics.scaledDensity = configuration.fontScale * metrics.density;
            context.getResources().updateConfiguration(configuration, metrics);
        }
    }
    

    WARNING! That will totally ignore Accessibility Font Scale user settings and will prevent your App fonts scaling!

提交回复
热议问题