我必須在Android中更改運行時的語言(是的,我知道這不是一個好的行爲,但這是一個要求...)。在Android中更改運行時語言
所以我有一個基本的類,每個活動從中延伸。此類具有以下功能:
public static void changeLanguage(Context context) {
Resources res = context.getResources();
/*
* Change locale settings in the app.
*/
DisplayMetrics dm = res.getDisplayMetrics();
/*
* Store and load data in this preferences
*/
android.content.res.Configuration conf = res.getConfiguration();
String[] localArray = res.getStringArray(R.array.language_short_array);
if (localArray != null) {
SharedPreferences settings = context.getSharedPreferences(
MyService.APP_ID, MODE_PRIVATE);
conf.locale = new Locale(localArray[settings.getInt(
PREFERED_LANGUAGE_KEY, 0)]);
res.updateConfiguration(conf, dm);
}
}
我會調用這個方法的onCreate:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
changeLanguage(this);
}
這是超一流的。我的活動從此延伸並首先致電super.onCreate。在這次通話之後,他們設置了他們的佈局並初始化了他們的設置...
我以爲我的代碼行可以做到。但我有以下問題:有時候,活動會改變語言,有時候不會!
如果我在它上面設置了一個調試斷點,並在程序暫停後按下繼續,一切正常。所以我認爲,在某些情況下,如果我的應用程序「足夠慢」,語言將會正確更改,而如果應用程序速度太快,語言不會改變...
有沒有我的問題的解決方案?我怎麼能確定,我的語言在任何時候都能正確改變?
非常感謝!
編輯:這是從我的超類擴展一個類的實例
public class MainMenuActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
}
}
嘿。我已經添加了一個例子。它只是調用onCreate並設置內容視圖。有時它起作用,有時它不起作用。當我在setContentView中設置一個斷點並繼續時,它肯定會起作用 – Frame91