天天看點

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();
        }
           

繼續閱讀