我的应用程序中有一个 WebView
,它有一个带有可编辑文本字段的 HTML 表单。当用户点击这些字段之一时,WebView
会稍微放大,这是我不想要的。这种情况只发生在 Android 4.4 中,因为我为旧版本缩放 WebView
的方式(请参阅下面的代码)。
我见过Disable zoom when clicking on form fields within a WebView? ,它解决了我对旧版 Android 版本的问题,使用 WebSettings.setDefaultZoom(ZoomDensity.FAR)
解决了该问题,但该设置在 4.4 中已弃用。即使如此,我还是尝试了各种组合,包括设置此属性,并且我的 WebView
仍然会放大。
创建WebView
的代码:
public View createView(float parentWidth) {
mWebView = new ObservableWebView(mContext);
mWebView.getSettings().setJavaScriptEnabled(true);
//Listener for Console Messages
mWebView.setWebChromeClient(new MyWebChromeClient());
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT){
mWebView.setInitialScale(Globals.convertDpToPx(100));
} else{
WebSettings settings = mWebView.getSettings();
settings.setSupportZoom(false);
settings.setBuiltInZoomControls(false);
settings.setDisplayZoomControls(false);
}
loadURL();
return mWebView;
}
public void loadURL() {
mWebView.clearHistory();
mWebView.removeAllViews();
mWebView.loadUrl(mData.getUrl());
}
预先感谢您的帮助。
最佳答案
您可以将标记添加到 HTML 页面的头部:
<meta name="viewport" content="user-scalable=no, width=device-width">
而且,如果您无法更改原始 HTML,则可以在页面加载到 WebViewClient
中后运行一些 JavaScript 代码来更改它。像这样的东西:
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:"
+ "var newMeta = document.createElement('meta');"
+ "newMeta.setAttribute('name', 'viewport');"
+ "newMeta.setAttribute('content', 'user-scalable=no, width=device-width');"
+ "document.getElementsByTagName('head')[0].appendChild(newMeta);"
);
super.onPageFinished(view, url);
}
我已在运行 KitKat 的 Samsung Galaxy Tab 4 10.1 上对其进行了测试。在其他设备上,此代码会导致一些副作用,因此最好仅在 KitKat 或更高版本上执行它。
关于android - 在 Android 4.4 中单击 Web View 中的表单时禁用缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22229241/