2016-11-16 13 views
1

英語とタミール語のロケールを設定したアンドロイドアプリケーションを作成しています。タミル語をクリックするとタミル文字列が表示され、でも私はマニフェストで向きが横向きに変更されたときにAndroidのロケールが変更される

android:configChanges="locale|orientation|screenSize|keyboardHidden" 

使用しているロケールが英語にタミル語から変更されますその活動を開始したが、それは作品をしなかったとき、私は風景モードである活性を有するています。

私はこの問題をどのように克服することができますか教えてください。私は言語を共有設定に保存しています。

private static MyApplication mInstance; 
public static final String PREF_NAME = "CoconutMetaData"; 
public static final String PREF_USER_LANGUAGE_KEY = "userLanguage"; 
@Override 
public void onCreate() { 
    super.onCreate(); 

    mInstance = this; 
    SharedPreferences preferences = getSharedPreferences(PREF_NAME, MODE_PRIVATE); 
    String myLanguage = preferences.getString(PREF_USER_LANGUAGE_KEY,"en"); 

    // Set user specific locale (Language) 
    Locale mLocale = new Locale(myLanguage); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     conf.setLocale(mLocale); 
    } 
    res.updateConfiguration(conf, dm); 

    /** 
    * To display overflow menu when hard menu key is pressed (for devices that have hard menu key) 
    */ 
    try { 
     ViewConfiguration config = ViewConfiguration.get(this); 
     Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey"); 
     if (menuKeyField != null) { 
      menuKeyField.setAccessible(true); 
      menuKeyField.setBoolean(config, false); 
     } 
    } catch (Exception ex) { 

    } 
} 

public static synchronized MyApplication getInstance() { 
    return mInstance; 
} 

public void setConnectivityListener(ConnectivityReceiver.ConnectivityReceiverListener listener) { 
    ConnectivityReceiver.connectivityReceiverListener = listener; 
} 
@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
} 

答えて

1

LocalとグローバルConfigurationオブジェクト

Locale mLocale; 
    Configuration conf; 

宣言し、次のコード

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    try { 
     conf.setLocale(mLocale); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 
} 

試してからローカル設定、これはローカル言語を設定するための良い方法です

public void setLocale(String lang) { 

    myLocale = new Locale(lang); 
    Resources res = getResources(); 
    DisplayMetrics dm = res.getDisplayMetrics(); 
    Configuration conf = res.getConfiguration(); 
    conf.locale = myLocale; 
    res.updateConfiguration(conf, dm); 
    Intent refresh = new Intent(this, AndroidLocalize.class); 
    startActivity(refresh); 
} 

Example

関連する問題