在运行时更改显示语言并重新创建所有活动

时间:2015-01-06 20:34:19

标签: android android-activity multilingual

我希望能够在运行时更改Android应用程序中的显示语言,而无需重新启动应用程序。为此,我相信可以重新创建所有正在运行的活动。问题是我不知道如何引用ActivityManager未被销毁的所有活动。

2 个答案:

答案 0 :(得分:3)

添加"区域设置"你所有活动中的android:configChanges中的属性,然后覆盖活动中的onConfigurationChanged()并相应地处理语言更改。

更多关于http://developer.android.com/guide/topics/manifest/activity-element.html#config

答案 1 :(得分:0)

此方法将在所有API级别的设备上运行,请确保重新创建以编程方式更改语言的活动。

1。BaseActivity的{​​{1}}用于设置语言环境,attachBaseContext的{​​{1}}用于所有活动

extends
  1. 使用应用程序Activityopen class BaseAppCompactActivity() : AppCompatActivity() { override fun attachBaseContext(newBase: Context) { super.attachBaseContext(LocaleHelper.onAttach(newBase)) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) } } 设置区域设置语言

    attachBaseContext
  2. 使用语言环境onConfigurationChanged来处理语言更改,该方法适用于所有设备

     public class MyApplication extends Application {
    
       private static MyApplication application;
    
        @Override
        public void onCreate() {
            super.onCreate();
        }
    
        public static MyApplication getApplication() {
            return application;
        }
    
        /**
         * overide to change local sothat language can be chnaged from android device  nogaut and above
         */
        @Override
        protected void attachBaseContext(Context base) {
            super.attachBaseContext(LocaleHelper.INSTANCE.onAttach(base));
        }
    
        @Override
        public void onConfigurationChanged(Configuration newConfig) {
        /*** also handle chnage  language if  device language chnaged **/
    
            super.onConfigurationChanged(newConfig);
    
        }