更改语言环境时更新 Textclock

Update Textclock when changing locale

我在我的应用程序布局中使用了一个 textClock 小部件。我必须支持不同的语言,并且添加日期格式必须是完整的日期,如 "EEEE, dd MMMM yyyy HH:mm:ss a"。问题是日期名称和月份始终使用默认语言环境。当我以编程方式更改语言环境时,它不会改变。

有什么建议吗? 这不应该自动处理吗?

尝试使用 public void setTextLocale (Locale locale):

Resources res = context.getResources();
// Change locale settings in the app.
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale(language_code.toLowerCase());
yourTextClock.setTextLocale(conf.locale);
res.updateConfiguration(conf, dm);

它不适用于默认小部件。所以我使用了我自己的 class 并且它按预期工作。您只需确保以正确的方式更改您的语言环境。

   public class MyTextClock extends android.widget.TextClock {


    public MyTextClock(Context context) {
        super(context);
        setLocaleDateFormat();
    }

    public MyTextClock(Context context, AttributeSet attrs) {
        super(context, attrs);
        setLocaleDateFormat();
    }

    public MyTextClock(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setLocaleDateFormat();
    }

    private void setLocaleDateFormat()
    {
        Locale currentLocale = getResources().getConfiguration().locale;
        Calendar cal = GregorianCalendar.getInstance(TimeZone.getDefault(), currentLocale);

        String dayName = cal.getDisplayName(cal.DAY_OF_WEEK, Calendar.LONG, currentLocale);
        String monthName =cal.getDisplayName(cal.MONTH, Calendar.LONG, currentLocale);

        this.setFormat12Hour("'"+dayName+"' '"+monthName+"' dd, yyyy h:m:ss a");
        this.setFormat24Hour("'"+dayName+"', dd '"+monthName+"' yyyy HH:mm:ss");
    }
}

我从 xml 中删除了 format12Hour 或 format24Hour 属性并像这样更新了我的代码

digitalClock = view.findViewById(R.id.my_id);
textClock.setFormat12Hour("EEE, MMM dd");
textClock.setFormat24Hour("EEE, MMM dd");

更改语言后它工作正常