一般来说,android编程的多国语言支持的需求分为两种,一种是针对不同android设备的语言环境,App自动选择对应语言来显示。比如中文环境,就显示中文,如果英文就显示英文,这种方法较常见,也容易实现,网上相关文章很多,不多说了,另一种是在App中,可由用户自主选择App语言。此种方法网上相关文章也很多,但要真的实现却会有许多注意地方,本文主要对几个需注意的要点做下说明。
1.切言切的核心方法是用Resources类下的updateConfiguration方法来设置想要的语言。要想实现APP再次启动时自动切换成上次所选语言,就需要对所选哪种语言自行存贮。
public static void setApplicationLanguage(Context context) {
Resources resources = context.getApplicationContext().getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
Configuration config = resources.getConfiguration();
Locale locale = getSetLanguageLocale(context);
config.locale = locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
LocaleList localeList = new LocaleList(locale);
LocaleList.setDefault(localeList);
config.setLocales(localeList);
context.getApplicationContext().createConfigurationContext(config);
Locale.setDefault(locale);
}
resources.updateConfiguration(config, dm);
}
2.需要在Activity中重写AppCompatActivity下的attachBaseContext函数。
super.attachBaseContext(MultiLanguage.setLocal(newBase));
3.需要自定义一个继承自Application的app类,在其中重写attachBaseContext函数。
4.在调用语言切换方法时,使用的context应是Application的context,可用getApplicationContext()获得。
5、APP中title的语言切换,不能自动随所选择的语言切换,需要在代码中,重新设定title的显示内容。
相应的完整代码已上传csdn,经测试支持到androidX系统。已在实际项目中应用。此代码去除了语言切换非相关的所有东东,简单易懂,核心代码作为模块存在,方便移植。
下载链接:https://download.csdn.net/download/hugerat/13957532