2013-10-25 95 views
1

我有一個奇怪的問題,我想用WebView來顯示圖像並使其可縮放。我有以下方法我的活動中:設置webview(Android)的最小縮放級別

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_manual); 

    WebView webView = (WebView)findViewById(R.id.webView);  
    webView.loadUrl("file:///android_res/drawable/some_image.jpg"); 
    webView.setInitialScale(getScale()); 
    webView.getSettings().setBuiltInZoomControls(true); 
} 

getScale()方法計算的比例,我可以webView.setInitialScale()使用我的形象恰好擴展到整個屏幕寬度,和它的作品。內置的變焦控制也可以在某種程度上起作用,但是:

在放大圖像之後,我無法縮小到我的初始縮放比例,因爲最小比例大於我的初始比例。

使用WebSettings設置縮放密度沒有幫助,我認爲即使它在我的手機上做了也不會在另一個上。

我也試過:我製作了一個包含圖像的HTML頁面,它只是body元素的子元素。我將它的寬度設置爲100%,並且按照這種方式進行縮放。但是,如果我再次放大,圖像立即調整大小,以適應屏幕寬度。

我找到了一些答案,但沒有人真的幫助:

webView.getSettings().setLoadWithOverviewMode(true); 
    webView.getSettings().setDefaultZoom(ZoomDensity.FAR); 
    webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 

一個方案中提到採用反射改變的WebView類忽略的限制,但我擔心這可能會打破一些舊版本的我的應用程序的Android。我必須與API級別爲9的設備兼容。

回答

3

我想我找到了這樣的大多數情況下的解決方案,只要我們只是想加載一個圖像。這是一種解決方法,在調整圖像大小時會丟失一些圖像細節。儘管如此,它應該適用於大多數(如果不是所有的設備)。

我按照這種方法將圖像嵌入到一個基本的HTML頁面中,並用像素填充了<img>標籤和屏幕寬度。爲簡單起見我跳過從文件加載HTML和剛剛生成它我的Java代碼內:

private String generatePage() { 
    Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
    int displayWidth = display.getWidth(); 

    String result = 
      "<html>" 
      + "<meta name=\"viewport\" content=\"target-densitydpi=device-dpi,width=device-width\">" 
      + "<head>" 
      + " <title>Title</title>" 
      + "</head>" 
      + "<body>" 
      + "<image id=\"myImage\" src=\"drawable/image.jpg\" width=\"" + displayWidth + "px\" />" 
      + "</body>" 
      + "</html>"; 
    return result; 
} 

添加此方法到我的活動,並用它來產生其上運行的設備相匹配的代碼。該onCreate()方法,現在可以很簡單:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_manual); 

    WebView webView = (WebView)findViewById(R.id.webView); 

    webView.loadDataWithBaseURL("file:///android_res/", generatePage(), "text/html", "utf-8", null); 
    webView.getSettings().setBuiltInZoomControls(true); 
} 

重要提示:有跡象表明,你需要記住兩個細節,否則將無法正常工作。

  1. 您需要使用方法webView.loadDataWithBaseURL(...),否則你無法訪問HTML裏面的本地的Android ressources。這樣src屬性就不能指向你的圖像文件。

  2. 您需要HTML代碼中的標記<meta name="viewport" content="...">,並且必須在其content屬性中包含target-densitydpi=device-dpi。否則圖像的大小可能仍然不符合您的視口。

:您還可以指定一個minimal-scaleviewport標籤裏面,這確實影響了我的網頁流量。壞事:至少在我的Galaxy S3 mini上運行Jelly Bean 4.1。小於1.0的2 a minimal-scale沒有效果。

-2

可能這是你要搜索的內容

settings.setBuiltInZoomControls(true); 
settings.setSupportZoom(true); 
settings.setUseWideViewPort(true); 
settings.setJavaScriptEnabled(true); 
settings.setJavaScriptCanOpenWindowsAutomatically(true); 
相關問題