override AttachBaseContext in your activity
protected override void AttachBaseContext(Context @base){base.AttachBaseContext(MyContextWrapper.Wrap(@base,PreferencesManager.Language));}
Create class MyContextWrapper like this :
public class MyContextWrapper : ContextWrapper
{
public MyContextWrapper(Context @base) : base(@base)
{
}
[SuppressWarnings(Value = new string[] { "deprecation" })]
public static ContextWrapper Wrap(Context context, string language)
{
Configuration config = context.Resources.Configuration;
Locale sysLocale = null;
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
sysLocale = getSystemLocale(config);
}
else
{
sysLocale = getSystemLocaleLegacy(config);
}
if (!language.Equals("") && !sysLocale.Language.Equals(language))
{
Locale locale = new Locale(language);
Category[] vals = null;
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
vals = Locale.Category.Values();
}
else
{
config.SetLayoutDirection(locale);
}
if (vals != null && vals.Length > 0)
{
Locale.SetDefault(vals[0], locale);
}
if (Build.VERSION.SdkInt >= BuildVersionCodes.N)
{
setSystemLocale(config, locale);
}
else
{
setSystemLocaleLegacy(config, locale);
}
}
if (Build.VERSION.SdkInt >= BuildVersionCodes.JellyBeanMr1)
{
context = context.CreateConfigurationContext(config);
}
else
{
context.Resources.UpdateConfiguration(config, context.Resources.DisplayMetrics);
}
return new MyContextWrapper(context);
}
[SuppressWarnings(Value = new string[] { "deprecation" })]
public static Locale getSystemLocaleLegacy(Configuration config)
{
return config.Locale;
}
[TargetApi(Value = (int)BuildVersionCodes.N)]
public static Locale getSystemLocale(Configuration config)
{
return config.Locales.Get(0);
}
[SuppressWarnings(Value = new string[] { "deprecation" })]
public static void setSystemLocaleLegacy(Configuration config, Locale locale)
{
config.Locale = locale;
}
[TargetApi(Value = (int)BuildVersionCodes.N)]
public static void setSystemLocale(Configuration config, Locale locale)
{
config.SetLocale(locale);
}
}
Blockquote
In your Activity :
protected override void AttachBaseContext(Context @base)
{
base.AttachBaseContext(MyContextWrapper.Wrap(@base, PreferencesManager.Language));
}