为什么当用户在我的应用程序中更改语言时,android:label的文本不会改变?

时间:2016-10-11 02:32:14

标签: android sharedpreferences locale onconfigurationchanged

所以在我的应用程序中,用户看到的第一个Activity就是选择语言。

让我们假设用户选择法语然后转到ActivityB,然后转到ActivityC。

现在决定改变语言。

回到ActivityB然后回到第一个Activity并选择语言作为西班牙语。

现在再次当用户转到ActivityB时,片段/活动中的所有其他文本都更改为西班牙语,但android:label仍然保留为法语。如何解决这个问题?

这就是我的ActivityA看起来的样子

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             final Bundle savedInstanceState) {

        View rootView = inflater.inflate(R.layout.fragment_choose_language, container, false);
        radioGroup = (RadioGroup) rootView.findViewById(R.id.lang_choice_radio);
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
        {
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch(checkedId){
                    case R.id.english_lang:
                        // do operations specific to this selection
                        setLocale("en_US");
                        Intent intentEng = new Intent(getActivity(), Choose_Country.class);
                        startActivity(intentEng);
                        break;

                    case R.id.indonesian_lang:
                        // do operations specific to this selection
                        setLocale("in");
                        Intent intent = new Intent(getActivity(), Choose_Country.class);
                        startActivity(intent);
                        break;
                }
            }
        });
        return rootView;
    }

    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);
        Locale.setDefault(myLocale);
        onConfigurationChanged(conf);
        Intent refreshIntent = new Intent(getActivity(), ChooseLanguage.class); // refresh the activity
        refreshIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
        refreshIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(refreshIntent);
        getActivity().finish();
    }

2 个答案:

答案 0 :(得分:1)

在我的情况下,应用程序不会在更改区域设置后更改Actionbar语言。当我从最近的应用程序中移除app以使应用程序完全关闭时,它会发生变化。要解决这个问题,我想在刷新app或 oncreate 时使用setTitle(R.id.myapplabel),因此无需重新启动应用。在string.xml上翻译您的活动标签,它应该有效。

答案 1 :(得分:-1)

解决问题的几个步骤。

  1. 将您的应用移至工具栏,不再需要ActionBar

  2. 从AndroidManifest.xml文件中删除标签

    <activity
        android:name=".package.Activity"
        android:label=""
        android:configChanges="locale"
        android:screenOrientation="portrait"
        android:theme="@style/NoActionBar" />
    
  3. 更改语言环境活动时重新创建您的应用。recreate()

  4. 所有活动标题均应位于strings.xml文件中