1. 程式人生 > >Android WebView內容寬度自適應

Android WebView內容寬度自適應

我們平常在專案中有可能會遇到網頁的內容是通過json資料傳遞到app上面用WebView來顯示的,這時候我們通常都要調整內容的總寬度不超過父容器的寬度,這樣子使用者可以不用左右滑動就可以看到全部的內容.但是當我遇到這個問題的時候,我是想方設法想達到這個目的,用過WebView裡面的很多方法,包括:

1.第一種網上的方法(ps:失敗)

WebSettings settings = webView.getSettings(); 
settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 
LayoutAlgorithm是一個列舉用來控制頁面的佈局,有三個型別:

1.NARROW_COLUMNS:可能的話使所有列的寬度不超過螢幕寬度

2.NORMAL:正常顯示不做任何渲染

3.SINGLE_COLUMN:把所有內容放大webview等寬的一列中

用SINGLE_COLUMN型別可以設定頁面居中顯示,頁面可以放大縮小,但這種方法不怎麼好,有時候會讓你的頁面佈局走樣而且我測了一下,只能顯示中間那一塊,超出螢幕的部分都不能顯示。

2.第二種(失敗)

//設定載入進來的頁面自適應手機螢幕 
settings.setUseWideViewPort(true); 
settings.setLoadWithOverviewMode(true); 

其他的一些方法我也試過了,但是都沒達到預期的效果

後來我自己想到了可不可以通過css或者js來控制內容的顯示效果,於是使用了css來實現我需要的功能:

3.第三種(成功)

body{
word-wrap:break-word;
font-family:Arial;
}
通過css還可以改變文字的顏色等外觀效果,比如:
*{
color:#FF0000;
}

所以這裡寫個簡單的部落格給coder,如果其他方法不行的話,可以試試博主這個方法哦

    /**
     * 離線載入的網頁內容要加上的一些網頁原始碼
     * 博主這裡返回的網頁原始碼是指包含body的內容的,所以這些網頁的頭和一些css樣式可以直接拼接
     */
    private String codePrefixOne = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">" +
            "<html>" +
            "<head>" +
            "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=\">" +
            "<style type=\"text/css\">";

    private String codePrefixTwo = "</style>" + "</head>" + "<body></body>" + "</html>";

    private String codeSubfix = "</body></html>";
再次宣告部落格這裡返回的資料是隻有body內容的,所以博主進行css控制的時候只需要在body前面和後面進行拼接就行了,要拼接的字串已經在上面給出,但是關鍵的是下面這段
String webData = codePrefixOne + "*{color:" + "#123456" + ";}body{word-wrap:break-word;font-family:Arial}" + codePrefixTwo + detailStory.getBody() + codeSubfix;
這裡就可以拼接成要給完整的html原始碼了,可以看到也是在這裡把關鍵的css拼接上去的

還有一種情況就是返回的是完整的html原始碼,我該如何新增css樣式,其實有很多人問過我,這個問題對於一個稍微水平高一點的程式設計師都不是事啊,你無非不就是想把你的css這段程式碼插入到網頁原始碼中的<style></style>這對標籤中麼?這是字串操作的基礎,相信不是什麼難事.所以這裡部落格也不會給出程式碼思路已經給出