2016-11-16 81 views
1

我正在創建一個android應用程序,其中設置了英語和泰米爾語言的語言環境,當我單擊泰米爾語言時,它顯示泰米爾語中的字符串,每項工作都正常。我有一個活動是在橫向模式時,啓動該活動的區域被從泰米爾語改爲英語,即使我已經使用當方向更改爲橫向時,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