Forzar Android DateUtils.getRelativeDateTimeString () para ignorar la configuración regional del dispositivo?
He encontrado usando las API relativas de 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 Android hace. Por lo tanto, defecto a inglés, pero para cada lengua que no apoyo, la secuencia relativa aparece en la configuración del dispositivo.
Por ejemplo, como:
- ¿Cuál es el formato de hora para esta "fecha": "2014-08-20 00:00:00 -0500"?
- Uso del elemento de entrada de fecha HTML5 con android
- Visualización de la fecha en formato de doble dígito
- ¿Cómo obtener el número de días entre dos instancia de calendario?
- cómo convertir el valor de fecha larga en formato mm / dd / aaaa
Last attempt: hace 11 minutos.
Me gustaría hacer que la API llame por defecto al inglés para cualquier idioma que no soporte. Sin embargo, no veo dondequiera fijar la localización para la llamada de la API – Im que espera apenas falto en alguna parte.
¿Hay alguna manera de configurar el entorno local sólo para la llamada a la API, ignorando la configuración del dispositivo?
- Cómo convertir el formato de fecha de la bandeja de entrada de Android sms
- Cómo configurar el tiempo de época java?
- Cómo obtener el valor datepicker en formato de fecha?
- Android obtiene tiempo en este formato `aaaa-mm-dd hh: mm: ss`
- Formato correcto de la fecha
- Android DatePicker cambia a solo mes y año
- Selector de fecha en Android
- Android obtiene la fecha antes de 7 días (una semana)
De acuerdo con el código fuente de la clase DateUtils
utiliza el método Resource.getSystem()
y Locale.getDefault()
para formatear la fecha y la hora. Puede cambiar la configuración Locale
predeterminada 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 aún peores en este caso.
Esto funciona para mí hasta 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; } }
- Android: Acceso simultáneo al micrófono (RecognizerIntent + propia aplicación)
- Utilizar ArrayAdapter con AlertDialog y .setAdapter