Почему андроид: текст метки не меняется, когда пользователь меняет язык в моем приложении?

Поэтому в моем приложении самая первая активность, которую видит пользователь, - это выбор языка.

Скажем, если пользователь выбирает французский и затем переходит к 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();
    }

1 ответ

Решение

В моем случае приложение не будет менять язык панели действий после изменения локали. Это изменится, когда я удалю приложение из недавнего приложения, что сделает его полностью закрытым. Чтобы решить, я использую setTitle(R.id.myapplabel) когда вы хотите обновить приложение или создать, поэтому не нужно перезапускать приложение. Переведите метку вашей активности в string.xml, и она должна работать.

Несколько шагов для решения проблемы.

  1. Переместите приложение в ToolBar, больше не используйте ActionBar

  2. Удалить ярлык из файла AndroidManifest.xml

    <activity
        android:name=".package.Activity"
        android:label=""
        android:configChanges="locale"
        android:screenOrientation="portrait"
        android:theme="@style/NoActionBar" />
    
  3. Восстановите свое приложение при изменении языкового стандарта activity.recreate()

  4. Все заголовки действий должны быть в файле strings.xml.
Другие вопросы по тегам