Исключение NoSuchMethodError с SetLocale
В Xamarin я создал следующее расширение для изменения локали на лету:
public static void ToEnglishLocale(this Activity activity)
{
Locale locale = new Locale("en-US");
Configuration config = new Configuration();
config.SetLocale(locale);
activity.BaseContext.Resources.UpdateConfiguration(config, activity.BaseContext.Resources.DisplayMetrics);
}
Я нацеливаюсь на API 15, и он не работает со следующим исключением на API 15:
Unhandled Exception:
Java.Lang.NoSuchMethodError: no method with name='setLocale' signature='(Ljava/util/Locale;)V' in class Landroid/content/res/Configuration;
Есть ли другой "унифицированный" способ изменить локаль на лету? Спасибо!
1 ответ
Решение
Метод SetLocale был добавлен на уровне API 17, поэтому вы получаете сообщение об ошибке.
Ты можешь использовать Android.OS.Build.Version.SdkInt
свойство найти версию API во время выполнения и вызывать метод, только если он Android.OS.Build.VERSION_CODES.JellyBeanMr1
или новее. Если это не так, вы должны установить публичное свойство Locale вместо вызова SetLocale