【问题标题】:Date picker doesn't change its language with the rest of my app日期选择器不会随我的应用程序的其余部分更改其语言
【发布时间】:2021-01-07 11:56:41
【问题描述】:

我有一个应用程序,它有一个按钮,可用于更改此应用程序内的语言。唯一不受更改影响的是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
                    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 DatePickerDialoghttps://gist.github.com/gilbertwat/4631571 但没有任何效果。

【问题讨论】:

    标签: android android-resources


    【解决方案1】:
    new DatePicker(getActivity().getApplicationContext());
    

    为您的日期选择器使用 Activity 而不是 Application 上下文。

    您的语言更改代码仅覆盖活动上下文资源。无论如何,活动上下文是用于用户界面小部件的正确上下文。

    【讨论】:

    • 我将代码更改为:product_expirationDate_datepicker = new DatePicker(getActivity().getBaseContext());,但语言仍然没有改变。月份名称与我手机的语言版本保持相同的语言版本
    • getActivity() 足以得到一个Activity 即是一个Context
    • product_expirationDate_datepicker = new DatePicker(getActivity()) 也不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    相关资源
    最近更新 更多