首页 > 解决方案 > 当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);

                    }
                }

标签: android

解决方案


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());
    }

否则,您可以通过资源文件控制语言,而不是在运行时更改它。然后您的应用程序中的语言将与您的设备中的语言相同。


推荐阅读