Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Webview-网页应适合设备屏幕_Android_Webview_Scaling_Android Webview - Fatal编程技术网

Android Webview-网页应适合设备屏幕

Android Webview-网页应适合设备屏幕,android,webview,scaling,android-webview,Android,Webview,Scaling,Android Webview,我尝试了以下方法,以适应基于设备屏幕大小的网页 mWebview.setInitialScale(30); 然后设置元数据视口 <meta name="viewport" content="width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" /> <meta name="viewport" content="width=device-width; initial-scale=1.0; maxim

我尝试了以下方法,以适应基于设备屏幕大小的网页

mWebview.setInitialScale(30);
然后设置元数据视口

<meta name="viewport" content="width=320, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; minimum-scale=1.0; user-scalable=0;"/>
<meta name="viewport" content="width=device-width, target-densityDpi=medium-dpi"/>

但这一切都不起作用,网页并不是固定的设备屏幕大小

mWebview.setInitialScale(30);

有人能告诉我如何得到这个吗?

你必须手动计算需要使用的刻度,而不是设置为30

private int getScale(){
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int width = display.getWidth(); 
    Double val = new Double(width)/new Double(PIC_WIDTH);
    val = val * 100d;
    return val.intValue();
}
然后使用

WebView web = new WebView(this);
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());
WebView web = new WebView(this);
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());
你可以用这个

    WebView browser = (WebView) findViewById(R.id.webview);
    browser.getSettings().setLoadWithOverviewMode(true);
    browser.getSettings().setUseWideViewPort(true);

这将根据屏幕大小固定大小。

这将有助于根据网页调整仿真器:

mWebview.setInitialScale(30);
WebView wb;
//CALL THIS METHOD
wb.setInitialScale(50);

您可以按上图所示的百分比设置初始比例。

试试这个HTML5提示

如果你的安卓版本是2.1或更高版本,那么就使用这个

  WebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
朋友们

我从你那里找到了很多重要的信息。但是,对我来说唯一有效的方法是:

webView = (WebView) findViewById(R.id.noticiasWebView);
webView.setInitialScale(1);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webView.setScrollbarFadingEnabled(false);
webView.loadUrl("http://www.resource.com.br/");
我之所以在安卓2.1上工作,是因为该公司的设备类型。但是我用每个人的部分信息解决了我的问题


谢谢你

这些设置对我有效:

wv.setInitialScale(1);
wv.getSettings().setLoadWithOverviewMode(true);
wv.getSettings().setUseWideViewPort(true);
wv.getSettings().setJavaScriptEnabled(true);
我的尝试中缺少setInitialScale(1)


尽管文档中说,如果将setUseWideViewPort设置为true,0将一直缩小,但0对我不起作用,我必须将其设置为1。

这些对我起作用,并使WebView适合屏幕宽度:

// get from xml, with all size set "fill_parent"  
webView = (WebView) findViewById(R.id.webview_in_layout);  
// fit the width of screen
webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 
// remove a weird white line on the right size
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);  

感谢上面的建议,在这种情况下,您必须在Web视图中使用HTML。我用下面的代码解决了这个问题

webView.loadDataWithBaseURL(null,
                "<!DOCTYPE html><html><body style = \"text-align:center\"><img src= "
                        + \"http://www.koenvangorp.be/photos/2005_09_16-moon_2000.jpg\"
                        + " alt=\"pageNo\" width=\"100%\"></body></html>",
                "text/html", "UTF-8", null);
webView.loadDataWithBaseURL(空,
"",
“文本/html”、“UTF-8”、空);

不推荐使用显示对象的getWidth方法。Override onSizeChanged可在WebView可用时获取其大小

WebView webView = new WebView(context) {

    @Override
    protected void onSizeChanged(int w, int h, int ow, int oh) {

        // if width is zero, this method will be called again
        if (w != 0) {

            Double scale = Double.valueOf(w) / Double.valueOf(WEB_PAGE_WIDTH);

            scale *= 100d;

            setInitialScale(scale.intValue());
        }

        super.onSizeChanged(w, h, ow, oh);
    }
};
将起作用,但请记住删除以下内容:

<meta name="viewport" content="user-scalable=no"/>

如果html文件中存在,请更改user scalable=yes,否则不会

WebView browser = (WebView) findViewById(R.id.webview);
browser.getSettings().setLoadWithOverviewMode(true);
browser.getSettings().setUseWideViewPort(true);
browser.getSettings().setMinimumFontSize(40);

这对我来说非常有用,因为文本大小已由.setLoadWithOverViewMode和.setUseWideViewPort设置为非常小

理论上,以下各项的组合:

settings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); 


修复了该问题,将内容包装并安装到屏幕上。但这一政策遭到了反对。我建议您阅读下面这篇详细探讨这个问题的文章:

您所需要做的只是

webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);

自display.getWidth()之后,由danh32对答案进行更改;现在不推荐使用

private int getScale(){
    Point p = new Point();
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    display.getSize(p);
    int width = p.x; 
    Double val = new Double(width)/new Double(PIC_WIDTH);
    val = val * 100d;
    return val.intValue();
}
然后使用

WebView web = new WebView(this);
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());
WebView web = new WebView(this);
web.setPadding(0, 0, 0, 0);
web.setInitialScale(getScale());

当我使用这个代码时,我也有同样的问题

webview.setWebViewClient(new WebViewClient() {
}
因此,您可能应该在代码中删除它
请记住为您的webview添加以下3种模式

    webview.getSettings().setJavaScriptEnabled(true);  
    webview.getSettings().setLoadWithOverviewMode(true);
    webview.getSettings().setUseWideViewPort(true);

这会根据屏幕大小固定大小,这似乎是一个XML问题。打开包含Web视图的XML文档。删除顶部的填充代码

然后在布局中,添加

android:layout_width="fill_parent"
android:layout_height="fill_parent"
在Web视图中,添加

android:layout_width="fill_parent"
android:layout_height="fill_parent" 

这使Web视图适合设备屏幕。

我有html字符串格式的视频,Web视图的宽度比屏幕宽度大,这对我很有用

WebView webView = (WebView)findViewById(R.id.web_view);
webView.setInitialScale((int) getResources().getDimension(R.dimen._50sdp)); // getActivity(). if you are at Fragment
webView.getSettings().setLoadsImagesAutomatically(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.loadDataWithBaseURL(null,here comes html content,"text/html","UTF-8", null);
webView.getSettings().setBuiltInZoomControls(true);
webView.getSettings().setSupportZoom(true);
webView.getSettings().setDisplayZoomControls(true);
webView.getSettings().setDefaultZoom(WebSettings.ZoomDensity.FAR);
将这些行添加到HTML字符串中

<head>
<meta name="viewport" content="width=device-width">
</head>

将上述代码添加到HTML字符串后的结果:

<!DOCTYPE html>
<html>

<head>
<meta name="viewport" content="width=device-width">
</head>


</html>

根据@danh32的回答,这里有一个更新版本,没有使用不推荐的方法:

protected int getScale(Double contentWidth) {
    if(this.getActivity() != null) {
        DisplayMetrics displaymetrics = new DisplayMetrics();
        this.getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        Double val = displaymetrics.widthPixels / contentWidth * 100d;
        return val.intValue();
    } else {
        return 100;
    }
}
类似地使用:

int initialScale = this.getScale(420d);
this.mWebView.setInitialScale(initialScale);

作为参考,这是@danh32解决方案的Kotlin实现:

private fun getWebviewScale (contentWidth : Int) : Int {
    val dm = DisplayMetrics()
    windowManager.defaultDisplay.getRealMetrics(dm)
    val pixWidth = dm.widthPixels;
    return (pixWidth.toFloat()/contentWidth.toFloat() * 100F)
             .toInt()
}
在我的例子中,宽度由三幅图像确定为300像素,因此:

webview.setInitialScale(getWebviewScale(300))


我花了几个小时才找到这篇文章。谢谢

谢谢你的回复,对了,很有效。但我有不同的问题。我不是在加载图像,而是在webview中加载网页,因此如何确定网页宽度(picu width)。啊,我忽略了其中的常量。很抱歉。我不确定如何获得实际网页的宽度。PIC_宽度是我事先知道的一个常量,因为我只是在显示资产文件夹中的一幅图像。正如我上面所说的,我不知道如何获得实际网页的宽度。@Maheshwarligate我使用PIC_width=360@danh32告诉PICU宽度的值。。。as 360对我来说不太好。这会影响屏幕,但不允许你再进行放大/缩小。这个问题可以改进吗?我知道这在IOS上是可能的。这个设置对我有效,但只适用于宽度,在同样的情况下,现在它正在降低高度。这是迄今为止我发现的实现这一点的最佳解决方案。解决方案内置的事实确实让我信服。要添加缩放,请添加以下内容:webview.getSettings().SetBuilTinZoomControl(真);webview.getSettings().setDisplayZoomControl(false);现在似乎单_列已被弃用,但不幸的是,他们弃用了该列,并且该解决方案在Galaxy S5getRight上对我失败,getLeft始终返回0,因为缩放不再起作用。我是唯一一个有这个问题的人?@你有什么解决办法吗?@AnshulTyagi:没有。因为这对我来说是一个测试项目,所以我没有进一步调查。如果你发现了什么,请告诉我@AnshulTyagi:因为网页对我来说很有用。对于图片,我必须使用一些不同的东西…@shahzainali你可以缩放你的网络视图吗?@AnshulTyagi不,它不会缩放。请不要仅仅因为投票失败就发布两个内容相同的答案。请花一点力气格式化你的代码!你为什么把它缩进右边这么多?删除一些空白的时间太多?如何获得
网页宽度
?如果您试图缩放一些固定宽度的内容以适应屏幕,那么您应该提前知道内容的宽度。这有意义吗?好的,这应该适用于图像。但对于网页(可以是响应性的),它可以是任何宽度>320px的,例如。我计算出比例应该小于1或100%,所以我将我的宽度与图片宽度进行比较,以获得比例。除此之外,我还扣除了一些填充。这节省了我的时间。填充父项已过时,请使用匹配父项。我想最好使用px ot vh而不是%。%在iFrame中,在方向改变方面有一些错误。我没有设置初始规模,这在我身上运行了多年。(我刚开始