'Resources.UpdateConfiguration is obsolete

I want to prevent system font-size changing, effects to my xamarin forms android application. I tried with below code in MainActivity.cs and its working, but it tells me that it is deprecated (res.UpdateConfiguration). I tried some other codes, but no luck.

public override Resources Resources
{
    get
    {
        Resources res = base.Resources;
        Configuration config = new Configuration();
        config.SetToDefaults();
        res.UpdateConfiguration(config, res.DisplayMetrics);
        return res;
    }

}


Solution 1:[1]

context.getResources().updateConfiguration() has been deprecated in Android API 25 and it is advised to use context.createConfigurationContext() instead.

public override Resources Resources
{
  get
  {              
   Configuration config = new Configuration();
   config.SetToDefaults();
               
   Context context = CreateConfigurationContext(config);
   Resources resources = context.Resources;

   return resources;
  }
}

Check Android context.getResources.updateConfiguration() deprecated

Update

If you want to change the font size, you should override the method AttachBaseContext.

Java

protected override void AttachBaseContext(Context @base)
{
  // base.AttachBaseContext(@base);
  Configuration config = new Configuration();
  config.SetToDefaults();
  config.FontScale = 1.0f;
  Context context = @base.CreateConfigurationContext(config);
  base.AttachBaseContext(context);
}

Kotlin

override fun attachBaseContext(newBase: Context) {
    
    val config =  Configuration();
    config.setToDefaults();
    config.setLocale(Locale("mr"))
    
    super.attachBaseContext(newBase.createConfigurationContext(config));
}

Solution 2:[2]

If you don't like using protected override, you can use

private void initFontScale()
{
     Configuration configuration = Resources.Configuration;
     configuration.FontScale = (float)1.45;
     //0.85 small, 1 standard, 1.15 big?1.3 more bigger ?1.45 supper big 
     DisplayMetrics metrics = new DisplayMetrics();
     WindowManager.DefaultDisplay.GetMetrics(metrics);
     metrics.ScaledDensity = configuration.FontScale * metrics.Density;
     BaseContext.ApplicationContext.CreateConfigurationContext(configuration); BaseContext.Resources.DisplayMetrics.SetTo(metrics);
}

protected override void OnCreate(Bundle bundle)
{
    initFontScale();
    ...
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Ermiya Eskandary
Solution 2