2016-11-16 7 views
1

Я создаю приложение для Android, в котором я установил языковой стандарт для английского языка и языка тамил, когда я нажимаю язык тамила, который отображает строки в tamils, и все отлично работает. Я имею деятельность, которая находится в ландшафтном режиме, когда начать эту деятельность локаль получает изменен с тамил на английском, даже я использовалИсходный код для 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; 

и установите Local от

@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