2015-10-22 4 views
0

У меня есть 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> 

ответ

1

Если я правильно помню, у вас есть для воссоздания вашей активности, чтобы изменения конфигурации вступили в силу. Для этого вы можете использовать Activity.recreate() (представленный в API 11).

Я еще не пробовал, но, чтобы избежать воссоздания активности, я бы постарался в том числе locale в свойстве configChanges.

+0

Если у моего приложения есть только MainActivity, то если я хочу изменить язык в MainActivity, мне нужно перезагрузить MainActivity. Но в моей ситуации я создал SplashActivity для изменения языка, поэтому мне не нужно перезагружать MainActivity Вы видите в «Путь 1 в моем коде», он работает, поэтому я думаю, что перезагрузка здесь не является хорошим решением –

+0

Моя догадка заключается в том, что со вторым способом изменение конфигурации не обрабатывается. Перейдя в MainActivity, обновляется текущий пользовательский интерфейс и автоматически обрабатывает изменение конфигурации. Подождав три секунды, я могу представить, что изменение конфигурации игнорируется. Пробовал ли вы включать configXhanges = "locale" в свой манифест? Может быть, это поможет. – Jozua