【问题标题】:Incorrect scale in WebViewWebView 中的比例不正确
【发布时间】:2014-07-26 19:48:36
【问题描述】:

我有一个基于 PrimeFaces 的网站。我的问题是 WebView 上的内容和图像看起来比 Chrome 上的大。我应该怎么做才能使 WebView 上的渲染与 Chrome 上的渲染相同?

缩放似乎没有帮助,因为该网站具有响应式设计。我也尝试过wrap_content 而不是fill_parent,但没有成功。

更新 1: 以下内容无效。我已将它们从下面的代码中排除以保持最小化。

  • WebViewClient
  • ChromeViewClient
  • setLoadWithOverviewMode(true)
  • setUseWideViewPort(true)

更新 2setInitialScale() 无效。

MyActivity.java

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    webView = (WebView) findViewById(R.id.web_engine);
    webView.setWebViewClient(new WebViewClient());
    webView.getSettings().setJavaScriptEnabled(true);
    if (savedInstanceState == null) {
        webView.loadUrl("http://www.primefaces.org/showcase/mobile/index.xhtml");
    }
}

ma​​in.xml

<RelativeLayout xmlns:a="http://schemas.android.com/apk/res/android"
            a:layout_width="fill_parent"
            a:layout_height="fill_parent"
            a:background="#ffffff"
            a:orientation="vertical" >

<WebView a:id="@+id/web_engine"
         a:layout_width="fill_parent"
         a:layout_height="fill_parent"
/>

【问题讨论】:

    标签: android primefaces webview webkit primefaces-mobile


    【解决方案1】:

    试试:

    webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING);
    webView.getSettings().setSupportZoom(true);
    

    此处提及:http://developer.android.com/guide/webapps/migrating.html

    更具体地说:http://developer.android.com/reference/android/webkit/WebSettings.LayoutAlgorithm.html#TEXT_AUTOSIZING

    完整代码在这里:

    mWebView = (WebView) mLayoutMain.findViewById(R.id.webview_main);
    mWebView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return false;
        }
    });
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.getSettings().setUseWideViewPort(true);
    mWebView.getSettings().setLoadWithOverviewMode(true);
    mWebView.getSettings().setBuiltInZoomControls(true);
    mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.TEXT_AUTOSIZING);
    mWebView.getSettings().setSupportZoom(true);
    mWebView.loadUrl("http://www.primefaces.org/showcase/mobile/index.xhtml");
    

    【讨论】:

    • 它没有效果(参见更新 2)。你真的试过了吗?
    • 它们在我的设备上是相同的(KitKat 4.4.4,Moto X)。你用什么来测试?
    • KitKat 4.4.4、Nexus 4。它们与第一张图片还是第二张图片相同?它们与我的原始代码相同还是在添加一些特定配置之后?可以附上截图吗?
    • 当我检查 Chrome 的开发工具中的相关 WebView 时,我看到计算的值明显不同。特别是在“主要”角色 div 标签中
    • 啊哈!弄清楚了。至少在我的设备上。编辑答案以反映我的更改。
    【解决方案2】:

    我有一个类似的问题,问题是系统字体大小(设置 -> 显示 -> 字体大小)影响了 WebView 中的字体大小,但不影响浏览器中的字体大小。

    当我使用cordova时,我用cordova plugin解决了这个问题,见this answer

    查看插件代码,它在 Android 中执行以下操作来重置字体大小:

    mWebView.getSettings().setTextZoom(100);
    

    或(ICS 之前):

    mWebView.getSettings().setTextSize(WebSettings.TextSize.NORMAL);
    

    【讨论】:

      【解决方案3】:

      首先,我建议您在不同的移动浏览器上测试您的应用。如果同样的问题,请参见下文:

      浏览器和您的应用程序之间的差异可能是因为您在将 setUseWideViewPort WebSetting 设置为 true 时犯了错误。

      查看以下链接:

      1. why does my font-size look so much larger in the android webview object than when viewed in the android browser?

      2. Android WebView text zoom for different screens and os version

      3. WebView text size

      【讨论】:

      • 感谢您的回答。在移动浏览器 (Chrome) 上呈现是完美的。所以我不需要检查不同的浏览器。您能否包含一个经过测试的代码来纠正我可能犯的错误?在问我的问题之前,我已经看到了这些问题。更改文本大小会产生影响。但是,图像仍然比应有的大。
      • 对图片试试这个 webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
      • 谢谢。图像仍然比应有的更大。此外,当网页包含 AdSense 广告时,在 WebView 版本中广告框会更大。我觉得这个问题不是通过修复文字、图片等就能解决的,而是应该和一个控制整体大小的参数有关。
      【解决方案4】:

      我在移动 chrome 和应用程序中都尝试了http://www.primefaces.org/showcase/mobile/index.xhtml,它们看起来都相似

      应用内

      在 Chrome 中

      我没有发现任何问题。您是否有可能在某些特定的 android 版本中有所不同?我在 4.4.4 验证过

      【讨论】:

      • 奇怪。我也在 4.4.4 上运行 Nexus 4。您是否执行了与我在问题中包含的完全相同的代码,或者您进行了一些修改?
      • 是的。设置是一样的。唯一的区别是我使用匹配父布局的宽度和高度,而我的 web 视图是线性布局的子视图。
      • 我尝试了线性布局并匹配父级。问题依然存在。
      【解决方案5】:

      要使字体大小与 chrome 或网站匹配而无需调整大小,只需执行 webSettings.setMinimumFontSize(1);

      亲切的问候 拉敏

      【讨论】:

        猜你喜欢
        • 2015-08-05
        • 1970-01-01
        • 1970-01-01
        • 2022-12-16
        • 2015-01-01
        • 2019-06-28
        • 1970-01-01
        • 2019-04-26
        • 1970-01-01
        相关资源
        最近更新 更多