values studio puede mexico languages language idioma configuracion change cambiar android locale android-7.0-nougat

android - studio - ¿Cómo obtener la configuración regional actual(nivel de API 24)?



string language android (3)

Yo estaba haciendo de esta manera:

context.getResources().getConfiguration().locale

Configuration.locale está en desuso si el destino es 24. Así que hice este cambio:

context.getResources().getConfiguration().getLocales().get(0)

Ahora dice que es solo para minSdkVersion 24, así que no puedo usarlo porque mi objetivo mínimo es más bajo.

¿Cuál es el método correcto?


En Configuration.java , hay:

/** * ... * @deprecated Do not set or read this directly. Use {@link #getLocales()} and * {@link #setLocales(LocaleList)}. If only the primary locale is needed, * <code>getLocales().get(0)</code> is now the preferred accessor. */ @Deprecated public Locale locale; ... configOut.mLocaleList = LocaleList.forLanguageTags(localesStr); configOut.locale = configOut.mLocaleList.get(0);

Básicamente, usar locale básicamente devuelve la configuración regional principal que el usuario establece. La respuesta de aceptación hace exactamente lo mismo que leer la locale directamente.

Sin embargo, esta configuración regional no es necesariamente la que se utiliza al obtener recursos. Puede ser la configuración regional secundaria del usuario si la configuración regional principal no está disponible.

Aquí hay una versión más correcta:

Resources resources = context.getResources(); Locale locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N ? resources.getConfiguration().getLocales() .getFirstMatch(resources.getAssets().getLocales()) : resources.getConfiguration().locale;


Podría usar Locale.getDefault() , que es la forma estándar de Java de obtener la Locale actual.


Verifique en qué versión se está ejecutando y retroceda a la solución obsoleta:

Locale locale; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { locale = context.getResources().getConfiguration().getLocales().get(0); } else { locale = context.getResources().getConfiguration().locale; }