2011-06-30 58 views
11

我發現使用android.text.format.DateUtils相對應的API返回像「昨天」或「2小時前」的值非常好 - 但我的應用不支持Android所做的每種語言。所以,我默認爲英文,但對於我不支持的每種語言,相對字符串會顯示在設備的設置中。強制Android DateUtils.getRelativeDateTimeString()忽略設備區域設置?

例如,如:

Last attempt: hace 11 minutos.

我想使API調用默認爲英語,我不支持任何語言。但是,我沒有看到爲API調用設置Locale的任何地方 - 我希望我只是在某處丟失它。

有沒有辦法爲API調用設置Locale,而忽略設備設置?

回答

6

根據DateUtils類的源代碼,它使用Resource.getSystem()Locale.getDefault()方法來格式化日期和時間。您可以使用Locale.setDefault()方法更改默認的Locale方法,但我不認爲可以更改Resource.getSystem()方法的返回值。您可以嘗試將默認語言環境更改爲Locale.US,但在我看來,在這種情況下結果會更糟糕。

+0

感謝@Pixie爲尋找到它。我拉下了消息來源,自言自語,不得不同意。 – Eric

+0

不客氣! – Michael

+1

有沒有人找到解決這個問題的方法? –

10

這是爲我工作起來到Android 7

void forceLocale(Locale locale) { 
    Configuration conf = getBaseContext().getResources().getConfiguration(); 
    updateConfiguration(conf, locale); 
    getBaseContext().getResources().updateConfiguration(conf, getResources().getDisplayMetrics()); 

    Configuration systemConf = Resources.getSystem().getConfiguration(); 
    updateConfiguration(systemConf, locale); 
    Resources.getSystem().updateConfiguration(conf, getResources().getDisplayMetrics()); 

    Locale.setDefault(locale); 
    } 

    void updateConfiguration(Configuration conf, Locale locale) { 
    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){ 
     conf.setLocale(locale); 
    }else { 
     //noinspection deprecation 
     conf.locale = locale; 
    } 
    } 
+0

這工作,謝謝! – aluxian

+0

適用於Android 4.1.2 – Atetc

+0

適用於Android 5.0 –