android - 当android中的语言更改时,日期选择器的标题/标题不会改变
问题描述
每当我从法语更改语言时 - >日期选择器的英语正文部分都会更改语言,但标题部分在旧选择的语言中保持不变。
这是我的日期选择器代码
final DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(),
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
Date selectedDate = DateUtils.getDateFromDecomposedDate(dayOfMonth,monthOfYear, year);
tvSelectedDate.setText(DateUtils.dateToString(getContext(), selectedDate.getTime()));
tvSelectedDate.setTextAppearance(getContext(), R.style.datePickerSelectedDateStyle);
onDatePickerCustomViewListener.onDateSet((String)tvSelectedDate.getTag(), selectedDate);
}
}
解决方案
DatePicker 中的标题似乎由应用程序上下文控制,但 DatePicker 的内容由活动上下文控制。通过以编程方式更改语言,您仅针对实际上下文更改配置,因此在您的情况下,月份名称确实发生了变化,但标题不变。更改语言时,可以更改特定上下文的配置
private void changeLanguage(Context context) {
Resources res = context.getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
if (preferences.getString("language", "FR").equals("FR")) {
conf.setLocale(new Locale("FR".toLowerCase()));
} else {
conf.setLocale(new Locale("EN".toLowerCase()));
}
res.updateConfiguration(conf, dm);
}
例如在 onResume() 方法中调用它
@Override
protected void onResume() {
super.onResume();
changeLanguage(this);
changeLanguage(getApplicationContext());
}
否则,您可以通过资源文件控制语言,而不是在运行时更改它。然后您的应用程序中的语言将与您的设备中的语言相同。
推荐阅读
- python - Python 脚本在直接运行但不能通过 cron 作业运行时有效
- r - 检查数据框中的值是否存在,如果该值存在或不存在,则创建一个值为 0/1 的新数据框
- python - 修改/创建 Spyder 键盘快捷键 `%clear` 和 `%reset`
- r - R中的参数图
- c++ - 在两个类中查找关系,在 C++ 中组合
- python - Pytorch:forward() 接受 1 个位置参数,但给出了两个
- json - 如何转换列表
到地图 在颤振中 - r - R改变路径geom_path在ggplot中通过
- javascript - Ajax 调用在我的 ASP.NET MVC 4 项目中偶尔返回 403 错误
- leaflet - 如何添加多个传单工具栏