Meine App verwendet JSoup, um den HTML-Code einer Message Board-Seite herunterzuladen (in diesem Fall handelt es sich um eine Seite, die die Beiträge eines bestimmten Threads enthält). Ich möchte diesen HTML-Code verwenden, unerwünschte Elemente entfernen und benutzerdefiniertes CSS anwenden, um ihn so zu gestalten, dass er in einer WebView "mobil" ist.
Sollte ich die Stile während der Verarbeitung in den HTML-Code einfügen (da ich sie sowieso verarbeiten werde) oder gibt es eine gute Möglichkeit, eine CSS-Datei zu den Assets meiner App hinzuzufügen und einfach darauf zu verweisen. Ich denke, letzteres wäre ideal, aber ich bin mir nicht sicher, wie ich es anstellen soll.
Ich sehe in loadVataWithBaseURL von WebView Hinweise, dass Sie auf lokale Assets verweisen können, aber nicht sicher sind, wie Sie sie verwenden sollen.
style.css
Datei im Android-Dateispeicher gespeichert ist. Sie müssen nur sicherstellen, dass diesbaseUrl
perfekt ist und mit demcss
relativen Pfad der Dateien übereinstimmt .Ich gehe davon aus, dass sich Ihr Stylesheet "style.css" bereits im Assets-Ordner befindet
Laden Sie die Webseite mit jsoup:
doc = Jsoup.connect("http://....").get();
Links zu externen Stylesheets entfernen:
// remove links to external style-sheets doc.head().getElementsByTag("link").remove();
Link zum lokalen Stylesheet setzen:
// set link to local stylesheet // <link rel="stylesheet" type="text/css" href="style.css" /> doc.head().appendElement("link").attr("rel", "stylesheet").attr("type", "text/css").attr("href", "style.css");
Zeichenfolge aus jsoup-doc / web-page erstellen:
String htmldata = doc.outerHtml();
Webseite in Webview anzeigen:
WebView webview = new WebView(this); setContentView(webview); webview.loadDataWithBaseURL("file:///android_asset/.", htmlData, "text/html", "UTF-8", null);
quelle
Hier ist die Lösung
Legen Sie Ihre HTML- und CSS-Datei in Ihrem Ordner / assets / ab und laden Sie die HTML-Datei wie folgt:
WebView wv = new WebView(this); wv.loadUrl("file:///android_asset/yourHtml.html");
dann können Sie in Ihrem HTML auf Ihre CSS auf die übliche Weise verweisen
<link rel="stylesheet" type="text/css" href="main.css" />
quelle
Es ist so einfach wie es ist:
WebView webview = (WebView) findViewById(R.id.webview); webview.loadUrl("file:///android_asset/some.html");
Und Ihre some.html muss etwas enthalten wie:
<link rel="stylesheet" type="text/css" href="style.css" />
quelle
Wenn Sie Ihr CSS im internen Dateispeicher haben, können Sie es verwenden
//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", "");
quelle
webContent
hier hat mich dazu gebracht, mein Problem zu lösen. Vielen Dank!Ist es möglich, den gesamten Inhalt in einem bestimmten Div auf einer Seite zu rendern? Sie können dann das CSS basierend auf der ID zurücksetzen und von dort aus weiterarbeiten.
Angenommen, Sie geben Ihre div id = "ocon"
Haben Sie in Ihrem CSS eine Definition wie:
#ocon *{background:none;padding:0;etc,etc,}
und Sie können Werte festlegen, um zu verhindern, dass alle CSS auf den Inhalt angewendet werden. Danach können Sie einfach verwenden
#ocon ul{}
oder was auch immer, weiter unten im Stylesheet, um neue Stile auf den Inhalt anzuwenden.
quelle
Sie können den Online-CSS-Link verwenden, um den Stil über vorhandenen Inhalten festzulegen.
Dazu müssen Sie Daten in die Webansicht laden und die JavaScript-Unterstützung aktivieren.
Siehe unten Code:
WebSettings webSettings=web_desc.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setDefaultTextEncodingName("utf-8"); webSettings.setTextZoom(55); StringBuilder sb = new StringBuilder(); sb.append("<HTML><HEAD><LINK href=\" http://yourStyleshitDomain.com/css/mbl-view-content.css\" type=\"text/css\" rel=\"stylesheet\"/></HEAD><body>"); sb.append(currentHomeContent.getDescription()); sb.append("</body></HTML>"); currentWebView.loadDataWithBaseURL("file:///android_asset/", sb.toString(), "text/html", "utf-8", null);
Verwenden Sie hier StringBuilder, um String für Style anzuhängen.
sb.append("<HTML><HEAD><LINK href=\" http://yourStyleshitDomain.com/css/mbl-view-content.css\" type=\"text/css\" rel=\"stylesheet\"/></HEAD><body>"); sb.append(currentHomeContent.getDescription());
quelle