2017-07-20 12 views
0

起動時にユーザーが設定を更新してアプリを再起動してダイアログ内の言語を選択したときに、アプリのロケールを変更できました。アプリの起動時にロケールを設定する

private void changeAppLanguage(String languageCode) { 
    Locale locale = new Locale(languageCode); 
    Locale.setDefault(locale); 

    Resources resources = mContext.getResources(); 
    Configuration configuration = resources.getConfiguration(); 

    // minSdkVersion: 16 
    configuration.locale = locale; 
    resources.updateConfiguration(configuration, resources.getDisplayMetrics()); 
} 

private void restartActivity() { 
    finish(); 
    Intent iMainActivity = getIntent(); 
    startActivity(iMainActivity); 
} 

しかし、冷たいアプリの起動時に、私はMainActivityが起動前に、ロケールを設定することはできませんよ。それだけで正しい文字列リソースをロードしませんし、私はない/できないこと最初の起動時にアクティビティを再開したい! 私はすでにchangeAppLanguage()を別の注文でonCreate()と呼んでいたので、何が間違っているのか分かりません。

@Override   
protected void onCreate(Bundle savedInstanceState) { 

    changeAppLanguage(getLanguageCode()); 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ButterKnife.bind(this); 

    variousSetups(); 
} 

答えて

1

Application OnCreate()メソッドに追加してみます。

0

アクティビティでこれを行う場合は、changeAppLanguage(getLanguageCode())アクティビティのオーバーライドattachBaseContext(Context)に電話することができます。

一般に、これをアクティビティでのみ行うと、ロケールを完全に適用するには不十分です。私は最終的に実装することは、これらの2つのポストからのソリューションに基づいています。私はこの場所でLocalHelper.onAttach(context)/LocaleManager.setLocale(context)/whatever you call itに電話を入れ

  1. アクティビティのattachBaseContext()

    @Override 
    protected void attachBaseContext(Context base) { 
        super.attachBaseContext(LocaleUtil.setLocale(base)); 
    } 
    
  2. アプリケーションのattachBaseContext()(活動用と同じ)

    @Override 
    protected void attachBaseContext(Context base) { 
        super.attachBaseContext(LocaleUtil.setLocale(base)); 
    } 
    
  3. アプリケーションの私のSharedPreferences.OnSharedPreferenceChangeListener実装で

    @Override 
    public void onConfigurationChanged(Configuration newConfig) { 
        super.onConfigurationChanged(newConfig); 
        LocaleUtil.setLocale(this); 
    } 
    
  4. @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
        if (LocaleUtil.SELECTED_LANGUAGE.equals(key)) { 
         context = LocaleUtil.setLocale(context); 
         ... 
        } 
    } 
    
関連する問題