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; maximum-scale=1.0; minimum-scale=1.0; user-scalable=0;"/> <meta name="viewport" content="width=device-width, target-densityDpi=medium-dpi"/> 

但没有任何作品,网页不固定到设备的屏幕大小。

谁能告诉我如何得到这个?

您必须计算您需要手动使用的比例,而不是设置为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 browser = (WebView) findViewById(R.id.webview); browser.getSettings().setLoadWithOverviewMode(true); browser.getSettings().setUseWideViewPort(true); 

这根据屏幕大小修复了大小。

朋友们,

我发现了很多重要的信息。 但唯一的办法就是这样:

 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/"); 

我正在使用Android 2.1,因为这种设备来自公司。 但我使用每一个信息的一部分来解决我的问题。

谢谢!

尝试使用这个HTML5技巧

http://www.html5rocks.com/en/mobile/mobifying.html

而如果你的Android版本是2.1或更高版本

  WebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 

这些为我工作,并适合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); 

感谢以上build议和日食Web视图中的白线

所有你需要做的只是简单的

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

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

 webview.setWebViewClient(new WebViewClient() { } 

所以可能你应该删除它在你的代码
并记住为您的webview添加3种模式

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

这根据屏幕大小修复了大小

这些设置适用于我:

 wv.setInitialScale(1); wv.getSettings().setLoadWithOverviewMode(true); wv.getSettings().setUseWideViewPort(true); wv.getSettings().setJavaScriptEnabled(true); 

setInitialScale(1)在我的尝试中失踪。

虽然文档说,如果setUseWideViewPort设置为true0将缩小所有的出路,但0不适合我,我不得不设置1

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

这对我很好,因为通过.setLoadWithOverViewMode和.setUseWideViewPort将文本大小设置为非常小。

这看起来像一个XML问题。 打开包含Web-View的XML文档。 删除顶部的填充代码。

然后在布局中添加

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

在Web-View中,添加

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

这使Web-View适合设备屏幕。

 int PIC_WIDTH= webView.getRight()-webView.getLeft(); 

在这种情况下,您必须在您的webView中使用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); 

Display对象的getWidth方法已被弃用。 覆盖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); } }; 
 webview.setInitialScale(1); webview.getSettings().setLoadWithOverviewMode(true); webview.getSettings().setUseWideViewPort(true); webview.getSettings().setJavaScriptEnabled(true); 

将工作,但记得删除像这样的东西:

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

如果存在于html文件中或更改user-scalable = yes,则不会。

这将有助于根据网页调整模拟器:

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

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

理论上来说是:

 settings.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS); 

 settings.setUseWideViewPort(false) 

修复了这个问题,把内容包装到屏幕上。 但是NARROW_COLUMNS已经被弃用了。 我build议你阅读下面的这个线索,详细探讨这个问题: https : //code.google.com/p/android/issues/detail?id=62378

自display.getWidth();更改为由danh32的答案; 现已被弃用。

 private int getScale(){ Point p = new Point(); Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); display.getSize(p); int width = px; 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 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);