转载自https://www.cnblogs.com/anee/archive/2013/02/19/2916828.html
内容有修改
-
使用系统设置中的API会改变系统的语言
-
用onPause()等去改变语言,效果不是太好。
下面的方法只有在新启动的activity中才能生效。
private void showPopupMenu(View view) {
...
//点击事件
popupMenu.setOnMenuItemClickListener(item -> {
switch (item.getItemId()) {
case R.id.English:
switchLanguage(Locale.ENGLISH);
break;
case R.id.Chinese:
switchLanguage(Locale.SIMPLIFIED_CHINESE);
break;
...
default:
popupMenu.dismiss();
break;
}
return false;
});
...
}
/**
* 修改界面语言
*
* @param locale 语言
*/
public void switchLanguage(Locale locale) {
Resources resources = getResources();// 获得res资源对象
Configuration config = resources.getConfiguration();// 获得设置对象
DisplayMetrics dm = resources.getDisplayMetrics();// 获得屏幕参数:主要是分辨率,像素等。
config.locale = locale; // 目标语言
resources.updateConfiguration(config, dm);
}
新浪微博以及微信都有多语言项,而且都是在设置界面。也就是说除了当前切换语言界面还有其它已启动的activity存在。
新浪微博使用重新启动的方式实现,微信则看似没有重新启动应用,猜测分析发现微信是将现有的activity栈中的除首页外都finish了,然后手动的将首页activity切换语言。这样就完美实现了。
以后最好将选择语言项设计到登陆页。