如何在具有适合所有设备的屏幕的 Webview 中显示网页的某些部分

Posted

技术标签:

【中文标题】如何在具有适合所有设备的屏幕的 Webview 中显示网页的某些部分【英文标题】:How to show Certain Part of WebPage inside Webview With Fit Screen to All Devices 【发布时间】:2012-11-10 12:45:41 【问题描述】:

我想在 WebView 中显示网页。到此为止还好。

但我有网页(如下所示),我想要其中的某些部分。我的意思是在所有设备的适合屏幕模式下应该只看到左上角。

自从过去两三天以来,我一直在解决这个问题。

我想要什么:我想显示网页的左上角以显示在 Webview 中,无论策略是使用缩放还是任何其他选项,但它应该适合所有设备的屏幕.

还有一件事我不能更改网页的源代码,因为它是固定的。 我必须通过代码自己管理。

我尝试了什么:我参考了 *** 链接,但没有运气。

这是我的代码。 :

            WebView wv;
        wv = (WebView) findViewById(R.id.webview_MyPoops);
        wv.getSettings().setjavascriptEnabled(true);

        // wv.setInitialScale(185);

        // wv.setInitialScale(30);
        String URL = "MY_LINK";

        wv.loadUrl(URL);

        WebSettings webSettings = wv.getSettings();
        webSettings.setSavePassword(false);
        webSettings.setSaveFormData(false);
        webSettings.setJavaScriptEnabled(true);
        webSettings.setSupportZoom(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setUseWideViewPort(true);

我正在设备中显示完整的网页。

它在我的 LG 设备(分辨率为 480*800)中运行良好,但在大型设备或 Galaxy Tab2 等标签中,左上角的图像非常小,屏幕的所有其他区域只是背景网页。

下面是运行上述代码后 Galaxy Tab2 的截图。 请给你任何我缺乏的建议。提前致谢。

【问题讨论】:

你能分享从 Galaxy Tab2 生成的输出吗? 试试这个并检查settings.setSupportMultipleWindows(true); 添加了galaxy tab2截图 @Robinhood:已经尝试过,但没有运气 如果网页是由您自己创建的,那么我建议最好使用 webserivce 而不是网页,通过 webserivce 传递所有需要的数据,在布局中显示地图和其他内容。 【参考方案1】:

尝试使用此代码为您完成这项工作。

webview.setInitialScale(getScale()); 



private int getScale()
            Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
            int width = display.getWidth(); 
            Double val = new Double(width)/new Double(200);
            Log.e("hh", "** "+val);
            val = val * 100d;
            Log.e("hh", "** "+val);
            return val.intValue();
        

【讨论】:

【参考方案2】:
WebView x;

x.setInitialScale(1);

这是可能的最大缩放。但对于某些网站来说,它只是看起来很丑陋。

这是我找到的第二个版本

test1.getSettings().setDefaultZoom(ZoomDensity.FAR);

这是一个不错的多面手,似乎只是缩小了很多,但仍然不是我想要的。

现在这是我的最终解决方案。

x.getSettings().setLoadWithOverviewMode(true);
x.getSettings().setUseWideViewPort(true);

基本上这些的作用在另一个这样的问题中得到了回答。

setLoadWithOverviewMode(true) 

加载完全缩小的 WebView

setUseWideViewPort(true)

【讨论】:

【参考方案3】:

您可以尝试使用htmlCleaner(如何使用它的示例here)从网页中获取 html,然后提取您要显示的部分并将其加载到 WebView 中使用:WebView.loadData();

我在我的一个应用程序中使用了这种方法来重新格式化页面,以便在移动设备上更容易使用。

【讨论】:

感谢您的支持。但我不允许从我们这边更改源代码。网络服务也是一种选择,但实际上它已在 3 年前在 iphone 中实现。所以我只能从那里管理场景。我不会更改网页中的单个代码。【参考方案4】:

在 HTML 页面上,您可以有类似 target-densitydpi=240; 的内容 根据设备类型,只需在 Java 代码中设置此参数,页面将自动适应目标密度。

【讨论】:

【参考方案5】:

我相信修复应该只在网页级别完成,理想情况下WebView 不能在这里做任何技巧。 WebView 只是一个浏览器(特定的 chromium 浏览器),它应该按照网页的指示进行渲染。

为了真正解决您的问题,您应该尝试修改网页的 CSS。

【讨论】:

以上是关于如何在具有适合所有设备的屏幕的 Webview 中显示网页的某些部分的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 webview 的初始缩放/宽度

UIWebView 不适合设备屏幕

视口适合屏幕宽度和大图像

如何使圆形收集单元适合所有屏幕?

Android Webview - 使用一个 loadUrl 缩放图像以正确适合屏幕

适用于所有移动设备的Webview App并上传到Play商店