Mah*_*raa 14 android webview android-7.1-nougat
我们使用Android N 7.1(API-25)获得了一个奇怪的行为.在启动WebView之后,系统强制将Locale重置为设备区域设置.这会覆盖应用程序上使用的区域设置(用于本地化).重现的简便方法是在应用程序上进行本地化.并启动WebView.然后,在您再次重新启动应用之前,您将不会再看到本地化内容.这只发生在Android-7.1(API-25)上
以下是我如何切换适用于所有API的Locale:
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());
}
Run Code Online (Sandbox Code Playgroud)
我上传了一个样本来重现该问题,详细信息如下:
https://github.com/mabuthraa/WebView-android7-issue
请知道这种行为是否是一个错误或可能是不正确的变更区域设置.
以下是Android组发行票证的链接:问题218310:[开发人员预览]创建WebView会将区域设置重置为用户默认值
Mah*_*raa 12
这是我的解决方案.
我们通过在初始化webView之后和加载内容之前再次强制设置区域设置来解决该问题:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
MyApp.getApplication().switchToCzLocale();
}
Run Code Online (Sandbox Code Playgroud)
例如在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");
}
Run Code Online (Sandbox Code Playgroud)
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());
}
}
Run Code Online (Sandbox Code Playgroud)
我希望这可能有所帮助,'.
我仍在寻找更好的解决方案.
归档时间: |
|
查看次数: |
1768 次 |
最近记录: |