2017-04-12 80 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; 
    }