android 语言设置

语言设置的代码网上都有,主要说几个容易出现的问题

代码如下:

//设置语言方法
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();
        }



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值