2013-01-15 34 views
0

我需要將HTML加載到WebView後將font-family更改爲自定義的字體。基本上,我需要得到這個:Android Jsoup更改字體家族的風格標記

<style> 
      @font-face { 
      font-family: 'MyFont'; 
      src: url('file:///android_asset/Custom-Font.otf') 
      } 
      body { font-family: 'MyFont', serif; font-size: 17px; color: #000; } 
      a { color: #000; } 
</style> 

<style> 
      body { font-family: 'Helvetica', serif; font-size: 17px; color: #000; } 
      a { color: #000; } 
</style> 

HTML是動態加載,而不是從資產。我使用Jsoup,但到目前爲止還無法獲取此字體系列參數...

回答

1

JSoup不會爲您解析CSS。它結束於掛着style元素的DataNode。從那裏,你在解析方面是獨立的。如果你有一個簡單的搜索和替換,你可以使用正則表達式來完成這項工作。對於複雜的情況,你可以看一下[CSS Parser] [1]。你的情況看起來相對簡單,但只給出一個範例,很難說出你想保存哪些元素。以下是基本構思的草圖,您可能需要修改以完全適合您的情況。基本思想是從Style標記中獲取DataNode,並使用正則表達式來搜索並替換該字段。

final String newFontInfo = "@font-face { \n" 
     + "font-family: 'MyFont';\n" 
     + "src: url('file:///android_asset/Custom-Font.otf')\n" + "}\n"; 
Elements styles = doc.select("style"); 
for (Element style : styles) { 
    for (DataNode data : style.dataNodes()) { 
     String dataTxt = data.getWholeData(); 
     if (dataTxt.contains("font-family")) { 
      final String newData = dataTxt.replaceAll("font-family:\\s*'[^']*'","font-family: 'MyFont'"); 
      data.setWholeData(newFontInfo + newData); 
     } 
    } 
} 
+0

非常感謝,你會如此友善地告訴如何改變正則表達式來匹配「單詞」? – Roman

+0

我不明白你想要什麼,如果你想匹配文字字符串「單詞」,或任何已知的字符串,你不需要一個正則表達式。如果你正在尋找別的東西,你將不得不澄清。學習編寫正則表達式對於很多情況非常有用。查看'Pattern' [docs](http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html),或者在Web上搜索正則表達式教程,所以你可以在你的工具箱中找到它。 – iagreen