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

    One Solution collect form web for “Android Nougat 7.1 restablece la configuración regional después de iniciar WebView”

    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.