为什么当用户在我的应用程序中更改语言时 android:label 的文本没有更改?
Why does android:label's text not changing when user changes language within my app?
所以在我的应用中,用户看到的第一个 Activity 是选择语言。
假设用户选择法语然后转到 ActivityB,然后转到 ActivityC。
现在决定更改语言。
所以回到 ActivityB 然后回到第一个 Activity 并选择语言作为西班牙语。
现在,当用户再次转到 ActivityB 时,fragment/activity 中的所有其他文本都更改为西班牙语,但 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();
}
在我的例子中,应用程序不会在更改语言环境后更改 Actionbar 语言。当我从最近的应用程序中删除应用程序时,它会发生变化,从而使该应用程序完全关闭。为了解决,我在你想刷新应用程序时使用setTitle(R.id.myapplabel)
或oncreate,所以不需要重新启动应用程序。在 string.xml 上翻译您的 activity 标签,它应该可以工作。
解决问题的几个步骤。
将您的应用移至 ToolBar 而不再是 ActionBar
从 AndroidManifest.xml 文件中删除标签
<activity
android:name=".package.Activity"
android:label=""
android:configChanges="locale"
android:screenOrientation="portrait"
android:theme="@style/NoActionBar" />
更改语言环境时重新创建您的应用 activity.recreate()
- 所有 activity 标题应在 strings.xml 文件中
所以在我的应用中,用户看到的第一个 Activity 是选择语言。
假设用户选择法语然后转到 ActivityB,然后转到 ActivityC。
现在决定更改语言。
所以回到 ActivityB 然后回到第一个 Activity 并选择语言作为西班牙语。
现在,当用户再次转到 ActivityB 时,fragment/activity 中的所有其他文本都更改为西班牙语,但 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();
}
在我的例子中,应用程序不会在更改语言环境后更改 Actionbar 语言。当我从最近的应用程序中删除应用程序时,它会发生变化,从而使该应用程序完全关闭。为了解决,我在你想刷新应用程序时使用setTitle(R.id.myapplabel)
或oncreate,所以不需要重新启动应用程序。在 string.xml 上翻译您的 activity 标签,它应该可以工作。
解决问题的几个步骤。
将您的应用移至 ToolBar 而不再是 ActionBar
从 AndroidManifest.xml 文件中删除标签
<activity android:name=".package.Activity" android:label="" android:configChanges="locale" android:screenOrientation="portrait" android:theme="@style/NoActionBar" />
更改语言环境时重新创建您的应用 activity.recreate()
- 所有 activity 标题应在 strings.xml 文件中