android - studio - webview définition




Rendu HTML dans un WebView avec CSS personnalisé (4)

C'est aussi simple que ça:

WebView webview = (WebView) findViewById(R.id.webview);
webview.loadUrl("file:///android_asset/some.html");

Et votre some.html doit contenir quelque chose comme:

<link rel="stylesheet" type="text/css" href="style.css" />

Mon application utilise JSoup pour télécharger le HTML d'une page de forum (disons dans ce cas c'est une page contenant les messages d'un sujet donné). Je voudrais prendre ce code HTML, supprimer les éléments indésirables et appliquer un style CSS personnalisé pour le rendre mobile dans un WebView.

Dois-je injecter les styles dans le HTML au fur et à mesure que je le traite (puisque je le traiterai de toute façon) ou existe-t-il un bon moyen d'ajouter un fichier CSS aux ressources de mon application et de s'y référer simplement. Je pense que ce dernier serait idéal, mais je ne sais pas comment y arriver.

Je vois des indices dans loadDataWithBaseURL de WebView que vous pouvez faire référence aux ressources locales, mais je ne sais pas comment l'utiliser.


Est-il possible d'avoir tout le contenu rendu sur la page, dans un div donné? Vous pouvez ensuite réinitialiser le CSS en fonction de l'ID, et travailler à partir de là.

Dites que vous donnez votre ID div = "ocon"

Dans votre css, ayez une définition comme:

#ocon *{background:none;padding:0;etc,etc,}

et vous pouvez définir des valeurs pour effacer tous les CSS de l'application au contenu. Après cela, vous pouvez simplement utiliser

#ocon ul{}

ou autre, plus bas dans la feuille de style, pour appliquer de nouveaux styles au contenu.


Si vous avez votre CSS dans le stockage de fichiers interne, vous pouvez utiliser

//Get a reference to your webview
WebView web = (WebView)findViewById(R.id.webby);

// Prepare some html, it is formated with css loaded from the file style.css
String webContent = "<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><link rel=\"stylesheet\" href=\"style.css\"></head>"
                      + "<body><div class=\"running\">I am a text rendered with INDIGO</div></body></html>";

//get and format the path pointing to the internal storage
String internalFilePath = "file://" + getFilesDir().getAbsolutePath() + "/";

//load the html with the baseURL, all files relative to the baseURL will be found 
web.loadDataWithBaseURL(internalFilePath, webContent, "text/html", "UTF-8", "");

Vous pouvez utiliser loadDataWithBaseURL

htmlData = "<link rel=\"stylesheet\" type=\"text/css\" href=\"style.css\" />" + htmlData;
// lets assume we have /assets/style.css file
webView.loadDataWithBaseURL("file:///android_asset/", htmlData, "text/html", "UTF-8", null);

Et seulement après que WebView sera en mesure de trouver et d'utiliser des fichiers css à partir du répertoire des biens.

ps Et, oui, si vous chargez votre fichier html dans le dossier assets, vous n'avez pas besoin de spécifier une URL de base.





webview