Android Nougat 7.1 restablece la configuración regional después de iniciar WebView

Tenemos un comportamiento extraño con Android N 7.1 (API-25) Que después de lanzar WebView, el sistema refuerza la configuración regional a la configuración del dispositivo. Que reemplaza el entorno local utilizado (para la localización) en la aplicación. Una manera fácil de reproducir que es conseguir una localización en la aplicación. Y lanzar un WebView. A continuación, no verá el contenido localizado hasta que vuelva a iniciar la aplicación. Eso sólo ocurre en Android-7.1 (API-25)

Aquí es cómo cambio la localización que está trabajando en todas las API:

public void switchToCzLocale() { Locale mLocale = new Locale("cs","CZ");// it can be any other Locale Configuration config = getBaseContext().getResources() .getConfiguration(); Locale.setDefault(mLocale); config.setLocale(mLocale); getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); } 

He subido una muestra para reproducir ese problema con más detalles sobre:

Https://github.com/mabuthraa/WebView-android7-issue

Por favor, cualquier idea si este comportamiento es un error o probablemente mala implantación de cambiar la configuración regional.

Aquí está el enlace para emitir el ticket en el grupo de Android: Edición 218310: [vista previa del desarrollador] Crear un WebView restablece la configuración regional a los valores predeterminados del usuario

    Aquí está mi solución de solución.

    Hemos resuelto el problema mediante la imposición de la configuración de locale de nuevo después de inicializar webView y antes de cargar contenido:

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { MyApp.getApplication().switchToCzLocale(); } 

    Por ejemplo, en WebActivity:

      @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web); mWebView = (WebView) findViewById(R.id.webview); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { MyApp.getApplication().switchToCzLocale(); } mWebView.loadData(getString(R.string.web_content), "text/html", "charset=UTF-8"); } 

    MyApp:

     import android.app.Application; import android.content.res.Configuration; import java.util.Locale; public class MyApp extends Application { private static MyApp sApplication; @Override public void onCreate() { super.onCreate(); switchToCzLocale(); sApplication = this; } public static MyApp getApplication() { return sApplication; } public void switchToCzLocale() { Locale mLocale = new Locale("cs","CZ"); Configuration config = getBaseContext().getResources() .getConfiguration(); Locale.setDefault(mLocale); config.setLocale(mLocale); getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics()); } } 

    Espero que pueda ayudar, '.

    Todavía estoy buscando una mejor solución.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.