如何改变android中所有活动的语言

时间:2016-09-22 06:33:33

标签: android localization

我想在所有活动中更改语言。是否有任何简单的方法来改变语言而不使用字符串资源。我尝试了类似下面的代码,但没有工作。任何一个帮助我通过简单的方式改变所有活动中的语言?

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {

        public void onItemSelected(AdapterView arg0, View arg1,
                                   int arg2, long arg3) {
            Configuration config = new Configuration();
            switch (arg2) {
                case 0:
                    SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(LocalizationUpdaterActivity.this);
                    preferences.edit().putString("lang", "ar").commit();
                    break;
                case 1:

                    break;

                default:
                    config.locale = Locale.TAIWAN;
                    break;
            }

        }

        public void onNothingSelected(AdapterView arg0) {
            // TODO Auto-generated method stub

        }
    });

申请代码:

    public class MainApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
        String lang = preferences.getString("lang", "en");
        Locale locale = new Locale(lang);
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config,
                getBaseContext().getResources().getDisplayMetrics());
    }
}

1 个答案:

答案 0 :(得分:0)

基本上你的代码是正确的。

以下代码有效。检查你是否错过了什么。 我猜您的应用程序代码没有执行,或者您的字符串翻译不可用。

工作样本:

<强>应用

@Override
public void onCreate() {
    super.onCreate();
    setResourceLocale(new Locale("en"));
}

private void setResourceLocale(Locale locale){
    if(Build.VERSION.SDK_INT >= 17){
        getBaseContext().getResources().getConfiguration().setLocale(locale);
    }else{
        Configuration config = getResources().getConfiguration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config,getResources().getDisplayMetrics());
    }
}

<强>活动:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Log.i(TAG, getString(android.R.string.no));
}

<强>的AndroidManifest.xml:

确保添加了自定义应用程序类!

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:name=".MainApplication"
    >

    <activity android:name=".MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

<强>增加:

使用语言和国家代码使用:

new Locale("de","DE")

查看this以获取正确代码的答案。