2016-11-08 19 views
11

Android N 7.1(API-25)で奇妙な動作が発生しました。WebViewの起動後、システムはロケールをデバイスロケールにリセットします。これは、アプリケーションで使用されたロケール(ローカライゼーション用)をオーバーライドします。簡単に再現する方法は、アプリケーションのローカリゼーションを取得することです。 WebViewを起動します。その後、もう一度アプリケーションを再起動するまで、ローカライズされたコンテンツは表示されなくなります。それが唯一のAndroid 7.1(API-25)Android Nougat 7.1はWebViewの起動後にロケールをリセットします

で発生ここで私はすべての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()); 
    } 

私は上の詳細とその問題を再現するためのサンプルをアップロードしています

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

してくださいこの動作はバグやロケールを変更するのはおそらく悪い注入であれば任意のアイデア。ここで

は、Androidのグループにチケットを発行するためのリンクです。ここIssue 218310: [developer preview] Creating a WebView resets Locale to user defaults

答えて

10

は私の問題を回避するソリューションです。

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

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()); 
    } 
} 

I

は、私たちは、WebViewのを初期化した後、再びロケールを設定する強制することによって、およびロードするコンテンツの前にその問題を解決しました助けるかもしれない希望

まだもっと良い解決策を探しています。

+0

今のところこれは唯一の解決策です。 –

関連する問題