2016-11-08 3 views
11

Android N 7.1 (API-25)에서 이상한 동작이 발생합니다. WebView를 시작한 후 시스템이 로케일을 장치 로케일로 강제 설정합니다. 이는 응용 프로그램에서 로케일 (현지화 용)을 재정의했습니다. 재현하기 쉬운 방법은 앱에서 현지화를하는 것입니다. WebView를 시작합니다. 그런 다음 앱을 다시 실행하기 전까지는 더 이상 현지화 된 콘텐츠를 볼 수 없습니다. 나는에 대한 자세한 내용과 그 문제를 재현하기 위해 샘플을 업로드 한Android Nougat 7.1이 WebView를 시작한 후 로케일을 재설정합니다.

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

: 그건

여기

내가 모든 API에서 일하고 로케일을 전환하는 방법입니다 안드로이드 7.1 (API-25)에서만 발생합니다

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

하십시오이 동작은 버그의 로케일을 변경 아마 나쁜 이식의 경우 어떤 생각. 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

우리는 웹보기를 초기화 한 후 다시 로케일을 설정 적용하여 및로드 컨텐츠 전에 문제를 해결 도움이 될 수있는 희망, '.

여전히 더 나은 해결책을 찾고 있습니다.

+0

지금이 유일한 해결책은 다음과 같습니다. | –

관련 문제