我需要在将html加载到WebView后将font-family更改为自定义系列。基本上我需要得到这个:
<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,但到目前为止无法获得这个font-family参数...
答案 0 :(得分:1)
JSoup不会为您解析CSS。它最终以DataNode
悬挂在style
元素上。从那里开始,就解析而言,你是独立的。如果您有简单的搜索和替换,则可以使用正则表达式来完成工作。对于复杂的情况,你可以看一下[CSS Parser] [1]。你的情况看起来相对简单,但只给出一个例子,很难说你想要保留哪些元素。这是基本概念的草图,您可能需要修改以完全适合您的情况。基本思路是从DataNode
标记中获取Style
并使用正则表达式搜索并替换字段。
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);
}
}
}