android - 如何在 Kotlin Android 中将日期选择器微调器对话框月份的语言更改为印度尼西亚语?
问题描述
在我的应用程序设计计划中,我想使用印度尼西亚语。在这种选择日期的情况下,我使用标准的 datepicker spinner 对话框,但我不知道如何更改月份的语言。这就是我的 datepickker 微调器的样子。如何将月份名称更改为印度尼西亚语,例如“Jan, Feb, Mar, Apr, Mei, Jun, Jul, Agu, Sep, Okt, Nov, Des”?
这是我的代码
val cal: Calendar = Calendar.getInstance()
val year: Int = cal.get(Calendar.YEAR)
val month: Int = cal.get(Calendar.MONTH)
val day: Int = cal.get(Calendar.DAY_OF_MONTH)
val dialog =
DatePickerDialog(
context,
R.style.Theme_Holo_Light_Dialog_NoActionBar_MinWidth,
{ _, year, month, day ->
listener.setTheDate(year, month, day) // this to change TextView
},
year, month, day
)
dialog.datePicker.maxDate = Date().time
dialog.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
dialog.show()
我也想让按钮(取消和确定)成为印度尼西亚语,如“Batal”和“OK”。期待支持。谢谢你。
解决方案
您可以像这里一样制作自定义日期选择器对话框。
因此,您可以创建自己的自定义小部件,称为 AppLocaleDatePickerDialog 或扩展 DatePickerDialog 的东西。在某些日期和时间选择器中有代表,因此您也需要检查这些代表。
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);
}
}
在 res/values/arrays.xml 中定义您的月份,并为您的语言创建值。如果是德语,则为 res/values-de/arrays.xml。
<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>
并在自定义小部件的声明中像这样初始化它:
initPicker(datePicker, resources.getStringArray(R.array.calendar_months));
关于按钮。您可以使用 setNegativeText() 和 setPositiveText() 轻松设置对话框的按钮文本。
dialog.setNegativeText(context.getResources().getString(R.string.cancel));
dialog.setPositiveText(context.getResources().getString(R.string.ok));
如果您需要有关使用字符串资源的更多信息,可以在此处找到。
推荐阅读
- android - Python/Kivy 应用程序到 Windows 上的 apk - 安装虚拟机后该怎么办?
- android - 打盹模式与网络状态
- angular - 如何获得增量后数字的总值
- json - 在 React-Native 中访问 Json 对象数组
- angular - ionic3 通过 `radio` 更改页面数据
- c# - 将事件设置为数组c#中的对象
- python - 句子含义相似度和频率
- hyperledger-fabric - 为什么 Hyperledger Fabric 通过编译源代码而不是二进制来安装链代码?
- node.js - React 中的模态不工作。显示错误
- socket.io - Angular 聊天应用程序分发(服务器应用程序)到服务器