我正在使用此应用程序类在我的应用程序中设置我的语言环境
public class MyApplication extends Application {
public static void updateLanguage(Context ctx) {
SharedPreferences prefs = getDefaultSharedPreferences(ctx);
String lang = prefs.getString("locale_override", "");
updateLanguage(ctx, lang);
}
public static void updatefont(Context ctx) {
SharedPreferences prefs = getDefaultSharedPreferences(ctx);
String lang = prefs.getString("locale_override", "");
if (lang.equals("ar")) {
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/Cairo-Regular.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
);
} else {
}
}
public static void updateLanguage(Context ctx, String lang) {
Configuration cfg = new Configuration();
if (!TextUtils.isEmpty(lang))
cfg.locale = new Locale(lang);
else
cfg.locale = Locale.getDefault();
ctx.getResources().updateConfiguration(cfg, null);
}
@Override
public void onCreate() {
updateLanguage(this);
updatefont(this);
super.onCreate();
}
}
它的工作正常但是当我在 Nexus 5X API 27 仿真器设备上进行测试时,它根本不起作用。所有解决方案都不起作用
答案 0 :(得分:0)
通过考虑这种方式,您将字体设置为 app (不是一个好方法),您应该this代替。
此外,您应该知道使用已弃用的方法来更改本地化,您还需要设置 DisplayMetrics ,如:
DisplayMetrics dm = res.getDisplayMetrics();
设置语言后,最好为用户重启应用程序(更好的体验)。
整个方法应该是:
@SuppressWarnings("deprecation")
public static void updateLanguage(Context ctx, String lang) {
Locale locale = new Locale(lang);
Resources resources = ctx.getResources();
Configuration configuration = resources.getConfiguration();
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
configuration.setLocale(locale);
} else{
configuration.locale=locale;
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){
getApplicationContext().createConfigurationContext(configuration);
} else {
resources.updateConfiguration(configuration,displayMetrics);
}
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
this.finish();
}