有没有办法在DatePickerDialog
法语
我搜索了这个,但没有找到结果
这是我的代码:
Calendar c = Calendar.getInstance();
picker = new DatePickerDialog(PaymentView.this,
PaymentView.this,
c.get(Calendar.YEAR),
c.get(Calendar.MONTH),
c.get(Calendar.DAY_OF_MONTH));
picker.setIcon(R.drawable.ic_launcher);
picker.setTitle("Choisir la date");
picker.getDatePicker().setMinDate(System.currentTimeMillis() - 2000);
而不是星期五,2014年11月21日我希望有法语缩写 我还在实例化它之前添加了它:
Locale locale = new Locale("FR");
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getApplicationContext().getResources().updateConfiguration(config, null);
答案 0 :(得分:18)
我做到了!
我在所有DatePickerDialog之前添加了这两行:
Locale locale = getResources().getConfiguration().locale;
Locale.setDefault(locale);
之后:
Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR);
int mMonth = c.get(Calendar.MONTH);
int mDay = c.get(Calendar.DAY_OF_MONTH);
DatePickerDialog dialog = new DatePickerDialog(MainActivity.this,
this, mYear, mMonth, mDay);
dialog.getDatePicker().setMaxDate(c.getTimeInMillis());
dialog.setTitle(R.string.main_first_day_of_your_last_period);
dialog.show();
我希望它有所帮助。
答案 1 :(得分:5)
我遇到了几乎类似的问题,我找到了这个答案的解决方案here
就我而言,我需要:
从链接中获得initPicker(context)
方法
/**
* Use reflection to use the Locale of the application for the month spinner.
*
* PS: DAMN DATEPICKER DOESN'T HONOR Locale.getDefault()
* <a href="http://code.google.com/p/android/issues/detail?id=25107">Bug Report</a>
* @param context
*/
public void initPicker(Context context) {
String monthPickerVarName;
String months[] = context.getResources().getStringArray(R.array.short_months);
if (Build.VERSION.SDK_INT >= 14) {
monthPickerVarName = "mMonthSpinner";
} else {
monthPickerVarName = "mMonthPicker";
}
try {
Field f[] = mDatePicker.getClass().getDeclaredFields();
for (Field field : f) {
if (field.getName().equals("mShortMonths")) {
field.setAccessible(true);
field.set(mDatePicker, months);
} else if (field.getName().equals(monthPickerVarName)) {
field.setAccessible(true);
Object o = field.get(mDatePicker);
if (Build.VERSION.SDK_INT >= 14) {
Method m = o.getClass().getDeclaredMethod("setDisplayedValues", String[].class);
m.setAccessible(true);
m.invoke(o, (Object)months);
} else {
Method m = o.getClass().getDeclaredMethod("setRange", int.class, int.class, String[].class);
m.setAccessible(true);
m.invoke(o, 1, 12, (Object)months);
}
}
}
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
try {
final Method updateSpinner = mDatePicker.getClass().getDeclaredMethod("updateSpinners");
updateSpinner.setAccessible(true);
updateSpinner.invoke(mDatePicker);
updateSpinner.setAccessible(false);
} catch (Exception e) {
Log.e(TAG, e.getMessage(), e);
}
}
在我的自定义小部件的initPicker(context)
方法中调用picker.init(...)
之前致电onViewCreated
在res / values / arrays.xml中定义short_months
<string-array name="months_values">
<item>Jan</item>
<item>Feb</item>
<item>Mar</item>
<item>Apr</item>
<item>May</item>
<item>Jun</item>
<item>Jul</item>
<item>Aug</item>
<item>Sep</item>
<item>Oct</item>
<item>Nov</item>
<item>Dec</item>
</string-array>
在res / values-ru / arrays.xml中定义short_months(在这个问题中必须是模拟res / values-fr / arrays.xml)
<string-array name="months_values">
<item>Янв</item>
<item>Фев</item>
<item>Мар</item>
<item>Апр</item>
<item>Май</item>
<item>Июн</item>
<item>Июл</item>
<item>Авг</item>
<item>Сеп</item>
<item>Окт</item>
<item>Ноя</item>
<item>Дек</item>
</string-array>
答案 2 :(得分:2)
相关课程:
http://developer.android.com/reference/android/app/DatePickerDialog.html http://developer.android.com/reference/android/widget/DatePicker.html http://developer.android.com/reference/android/widget/CalendarView.html
目前我认为没有任何可能使用标准版本使用本地化选项或重复使用timepickerdialog和datepicker实现来实现您自己的日历视图(您可以获取日历视图但不能设置日历视图)。您始终可以实现自己的自定义对话框。
我也在web找到了这个开源库。
表示它将处理本地设置。虽然没试过。
答案 3 :(得分:2)
您可以在DatePicker
之前添加此声明:
Locale.setDefault(Locale.FRANCE);
答案 4 :(得分:0)
NoSuchMethodException
,因为在一些TimePicker
和DatePicker
实现中,有一些单独的类,如TimePickerSpinnerDelegate
和{ {1}}包含这些变量和方法。以下是我更新拣货员的方式(针对API 14 +):
DatePicker.DatePickerSpinnerDelegate
所以我打电话给
private void initPicker(Object object, String[] values) {
try {
Field[] fields = object.getClass().getDeclaredFields();
for (Field field : fields) {
// If there's a delegate, we use it instead.
if (field.getName().equals("mDelegate")) {
field.setAccessible(true);
object = field.get(object);
fields = object.getClass().getDeclaredFields();
break;
}
}
for (Field field : fields) {
if (field.getName().equals("mAmPmStrings") ||
field.getName().equals("mShortMonths")) {
field.setAccessible(true);
field.set(object, values);
} else if (field.getName().equals("mAmPmSpinner") ||
field.getName().equals("mMonthSpinner")) {
field.setAccessible(true);
Object innerObject = field.get(object);
Method method = innerObject.getClass().getDeclaredMethod(
"setDisplayedValues", String[].class);
method.setAccessible(true);
method.invoke(innerObject, (Object) values);
}
}
Method[] methods = object.getClass().getDeclaredMethods();
for (Method method : methods) {
if (method.getName().equals("updateAmPmControl") ||
method.getName().equals("updateSpinners")) {
method.setAccessible(true);
method.invoke(object);
break;
}
}
} catch (Exception e) {
Log.e(APP_TAG, e.getMessage(), e);
}
}
和
initPicker(timePicker, resources.getStringArray(R.array.am_pm));
创建视图后,一切都按预期工作。
答案 5 :(得分:0)
您可以尝试更改DateDialogPicker对话框的上下文。每当此类问题在大多数情况下都发生是由于您当前的情况。
我遇到了同样的问题,有时我可以更改语言障碍,但有时无法更改,所以我尝试更改上下文,现在可以正常工作了。之前是片段上下文(requireContext())如下-
datePickerDialog = DatePickerDialog(
requireContext(), R.style.TimePickerTheme.....
但是后来我更改为以下(活动上下文-requireActivity()),它工作正常-
datePickerDialog = DatePickerDialog(
requireActivity(), R.style.TimePickerTheme.....