如何设置webview的初始缩放/宽度
我试图让WebView具有类似于Android浏览器的行为。 浏览器打开所有页面,尝试将宽度适合屏幕。 但是,WebView的默认行为是以100%的像素比例开始的,因此它开始放大到左上angular。
我花了几个小时试图find一种方法来让WebView像在浏览器中那样将页面缩放到屏幕上,但是我没有任何运气。 有没有人find一种方法来完成这个?
我看到的是一个名为setLoadWithOverviewMode的设置,但是这似乎没有做任何事情。 我还尝试了setInitialScale,但是在不同的屏幕尺寸和网页尺寸上,不会像浏览器缩放那样优雅。
任何人有任何线索?
谢谢
编辑:布赖恩的方法似乎工作时,手机在风景,但不是在肖像。 在纵向它是接近,但仍然不适合页面中的整个屏幕。 我开始这个赏金,希望有一个肯定的方式来获得最初的缩放,以适应页面的宽度在任何方向或屏幕大小的页面。
下面的代码加载了Google主页的桌面版本,在854×480像素的屏幕上完全缩小以适合Android 2.2的webview
。 当我重新调整设备的方向并重新加载纵向或横向时,页面宽度完全适合每次都在视图内。
BrowserLayout.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <WebView android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout>
Browser.java:
import android.app.Activity; import android.os.Bundle; import android.webkit.WebView; public class Browser extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.BrowserLayout); String loadUrl = "http://www.google.com/webhp?hl=en&output=html"; // initialize the browser object WebView browser = (WebView) findViewById(R.id.webview); browser.getSettings().setLoadWithOverviewMode(true); browser.getSettings().setUseWideViewPort(true); try { // load the url browser.loadUrl(loadUrl); } catch (Exception e) { e.printStackTrace(); } } }
我想出了为什么纵向视图不完全填满视口。 至less在我的情况下,这是因为滚动条总是显示。 除上面的视口代码之外,请尝试添加以下内容:
browser.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); browser.setScrollbarFadingEnabled(false);
这会导致滚动条不占用布局空间,并允许网页填充视口。
希望这可以帮助
这是老问题,但让我加一个细节,以防万一像我这样的人到这里来。
Brian发布的优秀答案在Jelly Bean中并不适合我。 我还要补充一点:
browser.setInitialScale(30);
该参数可以是任何达到resize的内容小于web视图宽度的百分比。 然后setUseWideViewPort(true)将内容宽度扩展到webview宽度的最大值。
尝试使用宽视口 :
webview.getSettings().setUseWideViewPort(true);
//对于图片和swfvideo,使用宽度为“100%”,高度为“98%”
mWebView2.getSettings().setJavaScriptEnabled(true); mWebView2.getSettings().setLoadWithOverviewMode(true); mWebView2.getSettings().setUseWideViewPort(true); mWebView2.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); mWebView2.setScrollbarFadingEnabled(true);
我正在为这个答案加载图片,我希望他们缩放到设备的宽度。 我发现,对于版本低于API 19(KitKat)的旧手机,Brian的回答行为并不像我喜欢的那样。 它会在较旧的手机上的某些图像周围留出大量空白,但适用于较新的手机。 这是我的替代scheme,从这个答案的帮助: Android的WebView可以自动调整大的图像? 布局algorithmSINGLE_COLUMN
已被弃用,但它的工作原理,我觉得适合使用旧的WebView。
WebSettings settings = webView.getSettings(); // Image set to width of device. (Must be done differently for API < 19 (kitkat)) if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { if (!settings.getLayoutAlgorithm().equals(WebSettings.LayoutAlgorithm.SINGLE_COLUMN)) settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); } else { if (!settings.getLoadWithOverviewMode()) settings.setLoadWithOverviewMode(true); if (!settings.getUseWideViewPort()) settings.setUseWideViewPort(true); }