2011-04-10 5 views
7

Je travaille sur une application Android, qui charge une page HTML et l'affiche dans un affichage Web. Le problème est que je veux ajouter mon CSS personnalisé (le HTML chargé n'a pas de CSS ou de lien vers un CSS). Comment puis-je ajouter le CSS personnalisé au code HTML en utilisant jsoup? Je ne peux pas modifier le code HTML. Et comment le webview peut-il l'ouvrir ensuite? MerciAjouter un code CSS personnalisé au code html avec jsoup

+0

Ce n'est pas une question identique. Je ne peux pas le charger avec loadDataWithBaseURL car il n'y a pas de lien vers un ccs dans le HTML. Donc, je ne peux pas faire référence à un CSS dans l'application locale. – PixelPW

Répondre

16

Plusieurs façons. Vous pouvez utiliser Element#append() pour ajouter du code HTML à l'élément.

Document document = Jsoup.connect(url).get(); 
Element head = document.head(); 
head.append("<link rel=\"stylesheet\" href=\"http://example.com/your.css\">"); 

Ou d'utiliser Element#attr(name, value) pour ajouter des attributs à des éléments existants. Voici un exemple qui ajoute style="color:pink;" à tous les liens.

Document document = Jsoup.connect(url).get(); 
Elements links = document.select("a"); 
links.attr("style", "color:pink;"); 

De toute façon, après modification, obtenez la chaîne HTML finale par Document#html().

String html = document.html(); 

Ecrire à déposer par PrintWriter#write() (avec le droit charset).

String charset = Jsoup.connect(url).response().charset(); 
// ... 
Writer writer = new PrintWriter("/file.html", charset); 
writer.write(html); 
writer.close(); 

Enfin l'ouvrir dans le webview. Puisque je ne peux pas le dire du haut de la tête, voici juste un lien avec un exemple qui je pense est utile: WebViewDemo.java. J'ai trouvé le lien sur this blog en passant (que j'ai trouvé à son tour par Google).

+0

Quel est le bon charset? Ce que je dois y mettre "// ..."? – PixelPW

+0

Le bon jeu de caractères est le 'Jsoup.connect (url) .response(). Charset();'. Le '// ...' est juste le code dont vous avez besoin pour obtenir le 'html'. – BalusC

+0

Merci, mais quand je mets ce pour éclipser il est dit: "Ajouter lance decleration" ... void main (String publiques ... args) throws FileNotFoundException , UnsupportedEncodingException { try {... Ce que je faire? – PixelPW

3

Probablement le moyen le plus simple est de rechercher et de remplacer sur le texte HTML pour insérer vos styles personnalisés, avant de le charger dans votre WebView. Je fais cela dans mon application BBC News pour relooker légèrement la page d'article. Mon code ressemble à ceci:.

text = text.replace("</head>", 
     "<style>h1 {font-size: x-large;} h1, div.date, div.storybody, img {margin:4px; padding:4px; line-height:1.25;}</style></head>"); 

Voyez comment je recherche et de remplacement sur l'étiquette fin head (y compris ma propre étiquette </head> dans le segment remplacé Cela garantit que le nouvel extrait va dans le bon rythme sur la page.

1

il aa quelques façons d'inclure ccs en html

Tis j'utiliser si vous l'avez stocké comme fichier externe:

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

Si vous voulez mettre stight i le fichier html:

<head> 
<style type="text/css"> 
hr {color:sienna;} 
p {margin-left:20px;} 
body {background-image:url("images/back40.gif");} 
</style> 
</head> 

Ou si vous WNAT de modifier une balise Singel:

<p style="color:sienna;margin-left:20px">This is a paragraph.</p> 

* Modifier

Tout d'exemples de thees shouldn N'avoir aucun problème à afficher.

Ref: W3 Schools CSS

+0

Le problème est que je charge le formulaire HTML une page Web, donc je ne peux pas changer le HTML. Je veux ajouter du code avec jsoup et charger mon propre CSS. – PixelPW

+1

Je vois, Votre question était trompeuse sonnait comme si vous avez le contrôle sur le code HTML. J'ai édité la question pour pointer les autres dans le bon sens. Je n'ai moi-même aucune exp. whit jsoup – KilledKenny