Android在应用程序中切换语言而无需重新启动
在片段(设置)中,按名为Android在应用程序中切换语言而无需重新启动,android,refresh,dialogfragment,Android,Refresh,Dialogfragment,在片段(设置)中,按名为DialogFragment的TextView,在其中更改设置(语言)应用程序,如何在DialogFragment附近关闭,在不重新启动整个应用程序的情况下应用设置 理想情况下,可以在SingleChoiceselection对话框中立即更改语言。重新启动后一切正常。下面是代码对话框片段: public class LanguageDialogFragment extends DialogFragment { final String[] itemsLang =
DialogFragment
的TextView
,在其中更改设置(语言)应用程序,如何在DialogFragment
附近关闭,在不重新启动整个应用程序的情况下应用设置
理想情况下,可以在SingleChoice
selection对话框中立即更改语言。重新启动后一切正常。下面是代码对话框片段
:
public class LanguageDialogFragment extends DialogFragment {
final String[] itemsLang = {"English", "Russian", "Ukraine"};
final String[] items = {"en", "ru", "uk"};
String lang;
MainActivity activity = new MainActivity();
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Выберите свой родной язык")
.setSingleChoiceItems(itemsLang, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
lang = items[item];
}
})
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
App.prefs.saveLanguage(lang);
App.changeLang(lang);
reload();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
return builder.create();
}
private void reload() {
Intent intent = getActivity().getIntent();
getActivity().finish();
Intent LaunchIntent = getActivity().getPackageManager().getLaunchIntentForPackage(App.context.getPackageName());
startActivity(LaunchIntent);
}
}
下面是我想要实现的应用程序示例:
它的屏幕截图:
请尝试下面的代码。您必须根据用户选择的语言创建新的区域设置,将其设置为当前区域设置,然后重新启动活动。请注意,如果在执行区域设置切换时其他活动处于活动状态,则可能必须重新启动这些活动
public class LanguageDialogFragment extends DialogFragment {
private final String[] itemsLang = {"English", "Russian", "Ukraine"};
private final String[] items = {"en", "ru", "uk"};
private String lang;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Выберите свой родной язык")
.setSingleChoiceItems(itemsLang, -1, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
lang = items[item];
}
}).setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//When user submits, restart the activity in
//the new language
restartActivityInLanguage(lang);
}
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//Do nothing
}
});
return builder.create();
}
private void restartActivityInLanguage(String language) {
Locale locale = new Locale(language);
Configuration config = new Configuration();
config.locale = locale;
Resources resources = getResources();
resources.updateConfiguration(config, resources.getDisplayMetrics());
getActivity().recreate();
}
}
这不是一个完美的解决方案,应用程序类的静态变量和jni库将不会重新初始化。我不想重新启动我的应用程序,因为应用程序正在执行一些任务,如录制屏幕。所以,如果不重新启动应用程序,Android 7.0有什么解决方案吗?嘿,你找到答案了吗?我现在也有同样的问题。