【问题标题】:How to change the language of datepicker spinner dialog months to be Bahasa Indonesia in Kotlin Android?如何在 Kotlin Android 中将日期选择器微调器对话框月份的语言更改为印度尼西亚语?
【发布时间】:2020-10-07 13:15:21
【问题描述】:

在我的应用设计计划中,我想使用印度尼西亚语。在这种选择日期的情况下,我使用标准的 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”。期待支持。谢谢。

【问题讨论】:

    标签: android kotlin datepicker dialog android-spinner


    【解决方案1】:

    您可以制作一个自定义日期选择器对话框,例如 here

    因此,您可以创建自己的自定义小部件,称为 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));
    

    如果您需要有关使用字符串资源的更多信息,可以找到here

    【讨论】:

    • 感谢您的回答。我终于想出了如何在您的代码的帮助下更改按钮文本。但也许是因为我的代码是用 Kotlin 编写的,而你的代码是用 Java 编写的,看起来差别很大。但是我不知道这个月的代码更改是如何工作的。我把你的代码,但很多错误。我不知道。同样,也许是因为语言不同,而且我对跨语言缺乏了解。我仍在努力完成此案。感谢您对 Katri Vilonen 的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    相关资源
    最近更新 更多