web-dev-qa-db-fra.com

WebView, ajouter un fichier .CSS local à une page HTML?

Dans Android j'utilise WebView pour afficher une partie d'une page Web que j'ai récupérée sur Internet en utilisant HttpClient d'Apache. Pour avoir uniquement la partie que je veux du HTML, j'utilise Jsoup.

String htmlString = EntityUtils.toString(entity4); // full html as a string                                 
Document htmlDoc = Jsoup.parse(htmlString); // .. as a Jsoup Document
Elements tables = htmlDoc.getElementsByTag("table"); //important part

Maintenant, je peux simplement chargertables.toString() dans la WebView et elle s'affiche. Maintenant, je veux lier un fichier CSS que je stocke dans mon dossier d'actifs avec cette page. Je sais que je peux avoir quelque chose comme

<LINK href="styles/file.css" type="text/css" rel="stylesheet">   

Dans mon html, mais comment le lier pour qu'il utilise celui que j'ai stocké localement?

---ÉDITER---
Je suis maintenant passé à ceci:

StringBuilder sb = new StringBuilder();
    sb.append("<HTML><HEAD><LINK href=\"file:///Android_asset/htmlstyles_default.css\" type=\"text/css\" rel=\"stylesheet\"/></HEAD><body>");
    sb.append(tables.toString());
    sb.append("</body></HTML>");
    return sb.toString();

D'une manière ou d'une autre, je n'obtiens pas les styles appliqués à la page. Est-ce le chemin de localisation que j'ai utilisé qui est faux? Aidez-moi, s'il vous plaît ..

37
user717572

Seva Alekseyev a raison, vous devez stocker les fichiers CSS dans le dossier assets, mais référencer par file:///Android_asset/filename.css URL ne fonctionne pas pour moi.

Il existe une autre solution: mettez CSS dans le dossier assets, faites votre manipulation avec HTML, mais faites référence à CSS par chemin relatif , et chargez HTML vers WebView par la méthode loadDataWithBaseURL() :

webView.loadDataWithBaseURL("file:///Android_asset/", htmlString, "text/html", "utf-8", null);

Par exemple. vous avez un fichier styles.css, placez-le dans le dossier assets, créez du HTML et chargez-le:

StringBuilder sb = new StringBuilder();
sb.append("<HTML><HEAD><LINK href=\"styles.css\" type=\"text/css\" rel=\"stylesheet\"/></HEAD><body>");
sb.append(tables.toString());
sb.append("</body></HTML>");
webView.loadDataWithBaseURL("file:///Android_asset/", sb.toString(), "text/html", "utf-8", null);

P.S. Je suis arrivé à cette solution grâce à réponse de Peter Knego .

71
Sergey Glotov

Vous ne pouvez pas stocker des fichiers arbitraires dans res - juste les types de ressources spécifiques (drawables, layouts, etc.). Le CSS doit aller dans le dossier assets à la place. Ensuite, vous pouvez vous y référer par l'URL suivante: file:///Android_asset/MyStyle.css

7
Seva Alekseyev