1

如何刷新应用与onConfigChanges没有松动的情况下

protected void onResume() { 
 
     super.onResume(); 
 

 

 
     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 
 
     Configuration config = getBaseContext().getResources().getConfiguration(); 
 

 
     String lang = settings.getString("lang_list", ""); 
 
     // Log.d("Lang",lang); 
 
     if (!"".equals(lang) && !config.locale.getLanguage().equals(lang)) { 
 
      recreate(); 
 
      Locale locale = new Locale(lang); 
 
      Locale.setDefault(locale); 
 
      config.locale = locale; 
 
      getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
 
     } 
 

 
     if (AppController.getInstance().isPreferenceChanged()) { 
 
      setupViewPager(viewPager); 
 
      adapter.notifyDataSetChanged(); 
 
     } 
 
    }

我想改变应用程序的语言,而不重新创建应用程序。我的意思是,当用户从设置中选择任何语言时,我想要这样做,然后它应该更改设置活动语言,而不使用recreate();,因为当我使用recreate();时,它会使应用程序闪烁一次。所以我不使用recreate();。相反,我写了下面的代码在制定活动在AndroidManifest.xml

<activity 
      android:name=".activity.SettingsActivity" 
      android:label="@string/title_activity_settings" 
      android:configChanges="orientation|keyboardHidden|screenSize|locale|layoutDirection"/> 

如下面的截图可以看到,我选择了“印地文”的语言,但它没有更新的活动,以印地文。我的意思是“选择国家”,“选择您的语言”和“选择类别”应以印地语而不是英语显示。我已经写了两种语言的字符串。

是否有人知道在更改语言时如何更改它? 或 为什么onConfigChanges不适用于区域设置,因为它是为Orientation工作的。

谢谢!

enter image description here

回答

0

在上在onStart回调您的MainActivity调用sharedPrefrences insted的调用的onCreate

例: -

protected void onStart() { 
    SharedPreferences sharedPreferences = this.getSharedPreferences("selectedLanguage", Context.MODE_PRIVATE); 
    String pine = sharedPreferences.getString("language", DEFAULT); 
    String languageToLoad = pine; 
    Locale locale = new Locale(languageToLoad);//Set Selected Locale 
    Locale.setDefault(locale);//set new locale as default 
    Configuration config = new Configuration();//get Configuration 
    config.locale = locale;//set config locale as selected locale 
    this.getResources().updateConfiguration(config, this.getResources().getDisplayMetrics()); 
    invalidateOptionsMenu(); //This changes language in OptionsMenu too 
    setTitle(R.string.app_name); //calling app name according to language selected by user 
    super.onStart(); 
} 
+0

什么都没有发生...... :( –

+0

我需要更改活动语言,因为我选择另一种语言....所有应用程序应自动更改为选定的语言... –

+0

发布您的微调代码。 – Queendevelopers

0

您可以使用一个单独的类将处理语言的变化,无需重新启动活动,

public class MyApplication extends Application 
{ 
    private Locale locale = null; 

    @Override 
    public void onConfigurationChanged(Configuration newConfig) 
    { 
     super.onConfigurationChanged(newConfig); 
     if (locale != null) 
     { 
      newConfig.locale = locale; 
      Locale.setDefault(locale); 
      getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics()); 
     } 
    } 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 

     SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this); 

     Configuration config = getBaseContext().getResources().getConfiguration(); 

     String lang = settings.getString(getString(R.string.pref_locale), ""); 
     if (! "".equals(lang) && ! config.locale.getLanguage().equals(lang)) 
     { 
      locale = new Locale(lang); 
      Locale.setDefault(locale); 
      config.locale = locale; 
      getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); 
     } 
    } 
} 
+0

不适用于我... :( –

+0

您是否在清单“name”标记中添加了MyApplication? –

+0

是..... @ Prokash –

相关问题