2017-12-26 40 views
2

私のアプリでアラビア語と英語を使用しようとしています。ノーガット以下で動作するデバイスで動作します。しかし、oreoデバイスでは機能しません。 API 26に新しいコード要件がありますか?私は以下のコードを使用しています。Oreoで言語を変更できません

public void changeLanguage(Context context, String language) { 
    Locale locale = new Locale(language); 
    Locale.setDefault(locale); 
    Configuration config = context.getResources().getConfiguration(); 
    config.setLocale(locale); 
    context.createConfigurationContext(config); 
    context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 
} 

言語の引数として "en"と "ar"を渡しています。

+0

このメソッドを呼び出す必要がある場所は、レイアウトセットの前に呼び出されます。 –

+0

私はレイアウトを設定した後にそれを呼び出しました。ボタンのonclickListenerの内側。 –

答えて

1

Localeを新しく設定するときは、Activityを再起動する必要があります。次に、あなたのchangeLanguage()方法は、次のようになります

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

:あなたは、コードの次のスニペットを使用して、それを実行することができ

public void changeLanguage(Context context, String language) { 
    Locale locale = new Locale(language); 
    Locale.setDefault(locale); 
    Configuration config = context.getResources().getConfiguration(); 
    config.setLocale(locale); 
    context.createConfigurationContext(config); 
    context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics()); 

    restartActivity(); 
} 
+0

ありがとうございます。それは働いた –

0
Locale locale = new Locale(lang); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
     config.setLocale(locale); 
    } else { 
     config.locale = locale; 
    } 
    context.getApplicationContext().getResources().updateConfiguration(config, 
      context.getApplicationContext().getResources().getDisplayMetrics()); 

これは私のために働きました。

関連する問題