2017-04-12 145 views
0

我開發的一個應用程序使用本地存儲的HTML在webview中顯示。Xamarin Android Webview顯示html源碼Android 7

它一直沒有任何問題,但在Android 7上顯示HTML源代替格式化HTML。

用於加載HTML代碼很簡單,因爲這

var webView = view.FindViewById<WebView>(Resource.Id.webview); 
webView.LoadUrl("file:///android_res/raw/info.html"); 

的HTML內容也非常簡單。

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="content-type" content="text/html; charset=utf-8"> 
    <meta name = "viewport" content = "width=device-width"> 
    <title></title> 
    <style> 

     body { 
      font-family: "Helvetica", sans-serif; 
      font-size: .85em; 
      padding-top: 25px; 
     } 

     body a { 
      color: #697782; 
      font-weight: bold; 
     } 

     h1 { 
      font-size: 1.15em; 
      text-transform: uppercase; 
      color: #24292f; 
      margin: 8px 0 8px; 
      padding: 0px; 
     } 

     strong { 
      color: #697782; 
      font-weight: bold; 
     } 

     p { 
      color: #2b2c30; 
      margin: 0 0 8px; 
      padding: 0px; 
     } 

    </style> 

</head> 
    <body> 
    </body> 
</html> 

我不使用Webview.LoadData,因爲閱讀HTML將需要將其添加爲資產,而不是資源,這我不打算這樣做。 (本地化)

任何任何想法如何解決這個問題?

回答

0

Oké。經過大量的試驗/錯誤,我找到了一個解決方案。

很多在線解決方案建議將文件移動到資產文件夾並從那裏讀取文件內容,因爲很多關於如何從RAW文件夾讀取文本文件信息的問題並不清楚。但我不想這樣做,因爲資產文件夾不支持本地化。

我想說明的與HTML文件的本地化

  • /raw/info.html
  • /raw-fr/info.html
  • /raw-nl/info.html

在我以前的解決方案,我稱之爲內容與

webView.LoadUrl("file:///android_res/raw/info.html"); 

在Android 7決定在瀏覽器中顯示源代碼HTML之前,該功能完美無缺。以這種方式選擇當前操作系統語言的正確文件。無需編寫任何本地化處理自己。

工作溶液

由來自文件加載字符串數據,並經由WebView.LoadData其饋送到web視圖()的。

 //get the Resource ID 
     var dd = Resource.Raw.info; 
     //read the file content from RAW folder 
     var content = LoadFile(dd); 
     //feed it to the webclient 
     // important: UTF-8 capitalized! 
     webView.LoadData(content, "text/html; charset=UTF-8", "UTF-8"); 

的的LoadFile看起來像這樣

public string LoadFile(int resourceId) 
    { 
     //get the file as a stream 
     var inputStream = Resources.OpenRawResource(resourceId); 
     var html = string.Empty; 

     using (StreamReader sr = new StreamReader(inputStream)) 
     { 
      html = sr.ReadToEnd(); 
     } 

     return html; 
    }