android - 在 Android 4.4 中单击 Web View 中的表单时禁用缩放

标签 android android-webview android-4.4-kitkat

我的应用程序中有一个 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/

相关文章:

Android Web View 在布局宽度变化时被拉伸(stretch)

android - 如何在 RTL 布局中直接在图像上使用 "autoMirrored"属性

android - AOSP 构建 - 从 eng 切换到 user 或 userdebug 时,不再创建数据目录

Android 4.2.2 - adb 离线,即使在 SDK 升级后

Java Geocoding - 将纬度和经度转换为地址

android - 将网站转换为 Android 应用程序

android - javax.net.ssl.SSLPeerUnverifiedException : No peer certificate on Android 4. x 和 5.x

android - 处理 GCM 发送的 Intent 时出错

java - 在android中获取 map 上的当前位置

android - 使用按钮在不同 fragment 中的 webview 中打开网站