0

WebViewにhtmlをロードした後、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パラメーターを取得できません...

4

1 に答える 1

1

JSoupはCSSを解析しません。それDataNodeは要素からぶら下がってしまうことになりstyleます。そこから、構文解析に関してはあなた自身です。単純な検索と置換がある場合は、正規表現を使用して作業を行うことができます。複雑な状況については、[CSSパーサー][1]を参照してください。あなたの状況は比較的単純に見えますが、たった1つの例を考えると、どの要素を保持したいかを判断するのは困難です。これが基本的な考え方のスケッチです。状況に完全に合うように変更する必要があるかもしれません。基本的な考え方はDataNodeStyleタグからを取得し、正規表現を使用してフィールドを検索および置換することです。

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);
        }
     }
 }
于 2013-01-15T16:31:26.040 に答える