WebView, ajoutez le 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 à partir d'Apache. Pour avoir seulement 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 charger tables.toString() dans le WebView et il s'affiche. Maintenant, je souhaite lier un fichier CSS que je stocke dans mon dossier d'actifs avec cette page. Je sais que je peux avoir quelque chose comme

  • Le style Android résout la compilation (aapt): Tableau des mauvaises ressources: taille de l'en-tête 0xc
  • Comment redimensionner un élément de script Java pour qu'il corresponde à sa fenêtre de conteneur
  • Comment puis-je ajouter un sous-dossier au dossier brut dans mon application Android?
  • ID d'identité protégés dans R.java
  • Impossible de se débarrasser complètement de la couleur de surbrillance sur l'application Phonegap 3.0 sur Android 4.1.2
  • Android: Bug avec ThreadSafeClientConnManager téléchargeant des images
  •  <LINK href="styles/file.css" type="text/css" rel="stylesheet"> 

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

    —MODIFIER—
    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 certaine manière, je n'obtiens pas les styles appliqués à la page. Est-ce que c'est le chemin de localisation que j'ai utilisé qui est erroné? Aidez-moi, s'il vous plaît ..

  • Solutions de contournement d'artefact d'accélération matérielle Android WebView
  • La bibliothèque de discussion Android WebKit ne dessine pas l'image d'arrière-plan
  • Rendu HTML dans un WebView avec CSS personnalisé
  • Masquer les images qui n'ont pas été chargées
  • Android Dropdown (Select) CSS
  • Combinez layout_weight et maxWidth pour les vues
  • 3 Solutions collect form web for “WebView, ajoutez le fichier .CSS local à une page HTML?”

    Seva Alekseyev a raison, vous devez stocker un dossier CSS dans un dossier d' assets , mais en vous référant par file:///android_asset/filename.css URL ne fonctionne pas pour moi.

    Il existe une autre solution: mettez CSS dans le dossier d' assets , effectuez votre manipulation avec HTML, mais consultez CSS par chemin relatif , et chargez HTML vers WebView par loadDataWithBaseURL() méthode:

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

    Par exemple, vous avez le fichier styles.css , placez-le dans le dossier des assets , créez le 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); 

    PS Je suis venu à cette solution grâce à la réponse de Peter Knego .

    Vous ne pouvez pas stocker des fichiers arbitraires en fonction des types de ressources spécifiques (drawables, layouts, etc.). Le CSS devrait aller au dossier d' assets à la place. Ensuite, vous pouvez le consulter par l'URL suivante: file:///android_asset/MyStyle.css

    Sur une note connexe, si vous ne stockez pas le fichier dans le dossier des ressources et que vous souhaitez utiliser des chemins relatifs, Webview sur Android nécessite parfois un point-slash avant les chemins relatifs.

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

    Voir cette publication

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.