Change app language in android 5.0 doesn't wor

2019-01-20 11:04发布

I'm using this code below to change my app language on button click (changing from french to english for example), it's works fine on android 4.0 + but on 5.0 it doesn't.

Locale localeEn = new Locale("en_US");
Locale.setDefault(localeEn);
Configuration configEn = new Configuration();
configEn.locale = localeEn;
getApplicationContext().getResources().updateConfiguration(configEn, null);
this.recreate();

Any clues why please?

edit : this is my manifest ( with android:configChanges )

<activity
            android:name=".activities.LoginActivity"
            android:configChanges="orientation|locale"
            android:label="@string/app_name"
            android:screenOrientation="portrait"/>

4条回答
贼婆χ
2楼-- · 2019-01-20 11:38

Try to change from this:

Locale localeEn = new Locale("en_US");
Locale.setDefault(localeEn);

to this

String language = "en";
String country = "US";
Locale locale = new Locale(language , country);
查看更多
你好瞎i
3楼-- · 2019-01-20 11:53

My solution, that i got from Udhay, works when user changes the language in actionbar and app "refreshes" with selected language. I am using android 6.0.

There is no need to add locale to androidManifest.

@Override
public boolean onOptionsItemSelected(MenuItem item) {

    Locale locale = null;
    switch (item.getItemId()) {
        case R.id.action_en:
            locale = new Locale("en_US");
            Toast.makeText(this, "English", Toast.LENGTH_SHORT).show();
            break;
        case R.id.action_is:
            locale = new Locale("is", "IS");
                    Toast.makeText(this, "Íslanska", Toast.LENGTH_SHORT).show();
            break;

    }

    Resources res = getResources();
    DisplayMetrics dm = res.getDisplayMetrics();
    Configuration conf = res.getConfiguration();
    conf.locale = locale;
    res.updateConfiguration(conf, dm);
    Intent refresh = new Intent(this, MainActivity.class);
    startActivity(refresh);
    finish();
    return true;
}
查看更多
爱情/是我丢掉的垃圾
4楼-- · 2019-01-20 11:53

My solution was changing the locale before activity's

setContentView(R.layout.layout_main); 
查看更多
小情绪 Triste *
5楼-- · 2019-01-20 11:55

Have you added android:configChanges="locale" in AndroidManifest.xml? I think the problem is in your AndroidManifest.xml file.

You can see example change locale on my github repository.

查看更多
登录 后发表回答