Özel CSS ile Web Görünümü'nde HTML oluşturma


82

Uygulamam bir mesaj panosu sayfasının HTML'sini indirmek için JSoup kullanıyor (diyelim ki bu durumda, belirli bir konu başlığının gönderilerini içeren bir sayfadır). Bu HTML'yi almak, istenmeyen öğeleri çıkarmak ve bir Web Görünümü'nde 'mobil' olacak şekilde biçimlendirmek için özel CSS uygulamak istiyorum.

Stilleri işlerken HTML'ye eklemeli miyim (yine de işleyeceğim için) veya uygulamamın varlıklarına bir CSS dosyası eklemenin ve ona başvurmanın iyi bir yolu var mı? İkincisinin ideal olacağını düşündüm, ancak bunun nasıl yapılacağından emin değilim.

WebView'ın loadDataWithBaseURL'sinde yerel varlıklara başvurabileceğiniz, ancak onu nasıl kullanacağınızdan emin olamayacağınız ipuçları görüyorum .

Yanıtlar:


129

WebView.loadDataWithBaseURL kullanabilirsiniz

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);

Ve ancak bundan sonra WebView, css dosyalarını varlıklar dizininden bulabilir ve kullanabilir.

ps Ve evet, html dosyanızı varlıklar klasöründen yüklerseniz, bir temel URL belirtmenize gerek yoktur.


10
Teşekkürler! Tam ihtiyacım olan buydu. (Bu arada, satır içi HTML'deki öznitelikler için çift tırnak yerine tek tırnak kullanabilirsiniz; bu şekilde bunları ters eğik çizgi çizmenize gerek kalmaz. Bana her zaman biraz daha derli toplu görünür ...)
Matt Gibson

2
Güzel. Doğrudan yanıt olarak PS'yi koyardım: html dosyanızı WebView.loadUrl ("file: ///android_asset/fname.html") ile yüklerseniz; içinde göreli url'ler kullanabilirsiniz.
fortboise

2
Biçim sayfası dosya deposunda ise loadDataWithBaseURL () 'yi nasıl kullanabiliriz? 'data / data / etc / "kullanabilir miyiz?
Yasir

1
@Yasir, style.cssdosyanız android dosya deposuna kaydedilmiş olsa bile çalışır . Bunun baseUrlmükemmel olduğundan ve cssdosyalara göre yolla eşleştiğinden emin olmanız yeterlidir .
Sakiboy

2
Dosyalarınız işlenmemiş klasörse ve öğelerde değilse ( bu size Android Yerelleştirme sağlar), temel URL "file: /// android_res / raw /" olacaktır
Sebastian

35

"Style.css" stilinizin zaten varlıklar klasöründe bulunduğunu varsayıyorum.

  1. web sayfasını jsoup ile yükleyin:

    doc = Jsoup.connect("http://....").get();
    
  2. harici stil sayfalarına bağlantıları kaldırın:

    // remove links to external style-sheets
    doc.head().getElementsByTag("link").remove();
    
  3. yerel stil sayfasına bağlantı ayarlayın:

    // 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");
    
  4. jsoup-doc / web-sayfasından dizge oluşturun:

    String htmldata = doc.outerHtml();
    
  5. web sayfasını web görünümünde görüntüle:

    WebView webview = new WebView(this);
    setContentView(webview);
    webview.loadDataWithBaseURL("file:///android_asset/.", htmlData, "text/html", "UTF-8", null);
    

güzel pratik çözüm, bunu UI (Ana) iş parçacığında kullanmamayı unutmayın.
Ata Iravani

Style.css'ye başka bir modülden erişmek istiyorum. Eğer bu imkansızsa, stili dizge olarak yüklemenin başka bir yolu var mı ve sonra kütüphane modülü sınıfına geçsin?
Mehdi

22

çözüm burada

Html ve css'nizi / assets / klasörünüze koyun, ardından html dosyasını şu şekilde yükleyin:

    WebView wv = new WebView(this);

    wv.loadUrl("file:///android_asset/yourHtml.html");

o zaman html'nizde css'nize her zamanki gibi başvurabilirsiniz

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

9

Olduğu kadar basit:

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

Ve some.html dosyanızın aşağıdaki gibi bir şey içermesi gerekir:

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

2

CSS'niz dahili dosya deposunda varsa, kullanabilirsiniz

//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", "");

Buradaki örnek, webContentsorunumu çözmemi sağladı. Teşekkürler!
JorgeAmVF

@JorgeAmVF'ye yardımcı olduğuna sevindim!
lejonl

1

Belirli bir div'de tüm içeriğin sayfa içinde görüntülenmesi mümkün müdür? Daha sonra css'yi kimliğe göre sıfırlayabilir ve oradan çalışabilirsiniz.

Div kimliğinizi = "ocon" verdiğinizi varsayalım

CSS'nizde aşağıdaki gibi bir tanıma sahip olun:

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

ve tüm css'lerin içeriğe uygulanmasını temizlemek için değerler ayarlayabilirsiniz. Bundan sonra sadece kullanabilirsin

#ocon ul{}

veya her neyse, içeriğe yeni stiller uygulamak için stil sayfasının daha aşağısında.


0

Stili mevcut içeriğin üzerine ayarlamak için Çevrimiçi Css bağlantısını kullanabilirsiniz.

Bunun için verileri web görünümünde yüklemeniz ve JavaScript Desteğini etkinleştirmeniz gerekir.

Aşağıda Kodu Gör:

   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);

Burada Stil için String eklemek için StringBuilder'ı kullanın.

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());
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.