'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 |