语言设置的代码网上都有,主要说几个容易出现的问题
代码如下:
//设置语言方法
public static void setLanguage(String setLanguage)
{
Resources resources = SysApplication.getInstance().getResources();
Configuration config = resources.getConfiguration();
DisplayMetrics dm = resources.getDisplayMetrics();
Locale mLocale=new Locale(setLanguage);
config.locale=mLocale;
resources.updateConfiguration(config, dm);
}
问题1、设置语言后自动退出或者当前页没有设置
方法:需要用intent再打开一次本页面
Intent intent = new Intent(XXX.this, XXX.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
问题2、无法设置成功,程序语言无变化
原因:可能性比较多,说一个自己犯下的错误,没有在onCreate中设置语言
方法:需要在每个activity中的onCreate设置语言,注意要在super.onCreate()之前,可以直接定义基类Activity
@Override
protected void onCreate(Bundle savedInstanceState)
{
setLanguage("zh");
<pre name="code" class="java"> super.onCreate(savedInstanceState);
}
问题3、设置成功后发现actionbar的title语言没有变化,原因应该是AndroidManifest载入是出于较高级(猜想为Appplication级别),但是我们的onCreate是出于activity级别,所以对于activity级别的Res资源会重新载入,但是Application的资源没有重新载入,没有想到什么好办法,可以设置语言后重启应用来骗过程序
Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName());
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
今天对上述(3)问题进行改善,既然actionbar的title没有载入,可能是系统漏洞,所以需要我们手动载入资源,所以需要我们手动获取资源,注意不是String资源,而是资源ID
try
{
ActivityInfo info = getPackageManager().getActivityInfo(this.getComponentName(), PackageManager.GET_META_DATA);
if(info.labelRes != 0)
{
setTitle(info.labelRes);
}
}
catch (Exception e)
{
e.printStackTrace();
}