2011-06-30 21 views
11

He encontrado utilizando las API relativas android.text.format.DateUtils que devuelven valores como "ayer" o "hace 2 horas" muy bien, pero mi aplicación no es compatible con todos los idiomas que tiene Android. Por lo tanto, prefiero inglés, pero para cada idioma que no admita, la cadena relativa se muestra en la configuración del dispositivo.¿Forzar Android DateUtils.getRelativeDateTimeString() para ignorar la configuración regional del dispositivo?

Por ejemplo, como:

Last attempt: hace 11 minutos.

me gustaría hacer la llamada a la API por defecto a cualquier idioma Inglés para que no apoyo. Sin embargo, no veo ningún lugar para configurar la configuración regional para la llamada a la API. Espero que me esté perdiendo en algún lado.

¿Hay alguna manera de establecer la configuración regional solo para la llamada API, ignorando la configuración del dispositivo?

Respuesta

6

De acuerdo con el código fuente de la clase DateUtils, utiliza los métodos Resource.getSystem() y Locale.getDefault() para formatear la fecha y la hora. Puede cambiar el valor predeterminado Locale utilizando el método Locale.setDefault(), pero no creo que sea posible cambiar el valor de retorno del método Resource.getSystem(). Puede intentar cambiar la configuración regional predeterminada a Locale.US, pero me parece que los resultados serán incluso peores en este caso.

+0

Gracias @Pixie para mirar en él. Bajé la fuente y hurgué un poco y tendría que estar de acuerdo. – Eric

+0

¡De nada! – Michael

+1

¿Alguien ha encontrado una solución a este problema? –

10

Esto es trabajo para mí hasta androide 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

Esto funcionó, ¡gracias! – aluxian

+0

Trabajado para Android 4.1.2 – Atetc

+0

Trabajado para Android 5.0 –

Cuestiones relacionadas