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设置为true , 0将缩小所有的出路,但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);