У меня есть SplashActivity
и MainActivity
, а язык устройства по умолчанию - английский. В SplashActivity
Я меняю язык приложения по умолчанию на vi (вьетнамский). Я использую 2 способа перехода от SplashActivity к MainActivity, которые я показал в приведенном ниже коде.
я очень тщательно тестируются много времени, но я до сих пор не знаю эту проблему
Любая помощь будет принята с благодарностьюИзменение языка в целом не работает с Handler
public class SplashActivity extends Activity {
...
protected void onCreate(Bundle savedInstanceState) {
...
changeDefaultLanguageConfigLanguage("vi");
moveToMain();
...
}
private void changeDefaultLanguageConfigLanguage(String language) {
Configuration config = new Configuration();
Locale locale = new Locale(language);
Locale.setDefault(locale);
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
public void moveToMain() {
/*
Way 1: The language in MainActivity change
*/
Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class);
context.startActivity(mainIntent);
/*
Way 2: The language in MainActivity don't change
*/
new Handler().postDelayed(new Runnable() {@
Override
public void run() {
Intent mainIntent = new Intent(SplashActivity.this, MainActivity.class);
startActivity(mainIntent);
//finish();
//overridePendingTransition(R.anim.fade_in, R.anim.fade_out);
}
}, 3000);
}
}
AndroidManifest.xml
<activity
android:name=".SplashActivity"
android:label="@string/title_activity_splash"
android:configChanges="orientation|keyboardHidden" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_main" >
</activity>
Если у моего приложения есть только MainActivity, то если я хочу изменить язык в MainActivity, мне нужно перезагрузить MainActivity. Но в моей ситуации я создал SplashActivity для изменения языка, поэтому мне не нужно перезагружать MainActivity Вы видите в «Путь 1 в моем коде», он работает, поэтому я думаю, что перезагрузка здесь не является хорошим решением –
Моя догадка заключается в том, что со вторым способом изменение конфигурации не обрабатывается. Перейдя в MainActivity, обновляется текущий пользовательский интерфейс и автоматически обрабатывает изменение конфигурации. Подождав три секунды, я могу представить, что изменение конфигурации игнорируется. Пробовал ли вы включать configXhanges = "locale" в свой манифест? Может быть, это поможет. – Jozua