问题描述
我有一个应用程序,它有一个按钮,用于更改此应用程序内的语言。唯一不受变化影响的是 DatePicker
。
更改我的应用语言的代码:
polishLanguage.setonClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
restartActivityInLanguage("pl");
}
});
private void restartActivityInLanguage(String language) {
Locale locale = new Locale(language);
Configuration config = new Configuration();
config.locale = locale;
config.setLocale(locale);
Resources resources = getResources();
resources.updateConfiguration(config,resources.getdisplayMetrics());
getActivity().recreate();
}
xml 中的 DatePicker 代码:
<DatePicker
android:id="@+id/datePicker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="-25dp"
android:layout_marginBottom="-25dp"
android:calendarViewShown="false"
android:datePickerMode="spinner" />
Java 中的 DatePicker 代码:
product_expirationDate_datepicker = new DatePicker(getActivity().getApplicationContext());
Calendar today = Calendar.getInstance();
long Now = today.getTimeInMillis();
product_expirationDate_datepicker.setMinDate(Now);
product_expirationDate_datepicker.init(today.get(Calendar.YEAR),today.get(Calendar.MONTH),today.get(Calendar.DAY_OF_MONTH),new DatePicker.OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker datePicker,int year,int month,int dayOfMonth) {
int selctedMonth = month + 1;
expirationDateString = (product_expirationDate_datepicker.getYear() + "-" + selctedMonth + "-" + product_expirationDate_datepicker.getDayOfMonth());
Log.e("onDateChanged","expirationDateString: " + expirationDateString);
HAS_DATE_BEEN_CHANGED = true;
}
});
logcat 没有错误,只是语言没有改变。我已经尝试过: Set language to French in android DatePickerDialog 和 https://gist.github.com/gilbertwat/4631571 但没有任何效果。
解决方法
new DatePicker(getActivity().getApplicationContext());
为您的日期选择器使用 Activity
而不是 Application
上下文。
您的语言更改代码只会覆盖活动上下文资源。无论如何,活动上下文是用于用户界面小部件的正确上下文。