更改语言环境时更新 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");
更改语言后它工作正常
我在我的应用程序布局中使用了一个 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");
更改语言后它工作正常