【问题标题】:Update Textclock when changing locale更改语言环境时更新 Textclock
【发布时间】:2015-08-25 10:32:08
【问题描述】:

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

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

【问题讨论】:

    标签: android locale date-format


    【解决方案1】:

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

    【讨论】:

    • 不幸的是,它不起作用。不知何故,它部分工作。我在葡萄牙语中使用,当我将语言更改为英语时,它会将格式更改为英语格式 12Hour,但日期和名称保留为葡萄牙语。有点奇怪..:S
    • 我已经用一些应该可以工作的代码更新了解决方案。请尝试告诉我它是否有用
    • 感谢 Andreu,但我得到了相同的结果。它会更改日期的格式,但日期和月份名称与平板电脑的区域设置保持一致。
    • 好的,我会继续寻找。如果您找到解决方案,请发布:)
    • 你必须自己创建TextClock 覆盖这部分代码
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      更改语言后效果很好

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多