2010-04-13 18 views
17

Przerzucam HTML do wyświetlenia strony internetowej do renderowania. W HTML muszę załadować obraz, który mam w /res/drawable.@ Wyświetlacz wyświetlacza/res/widoczny w WebView

mam /res/drawable/my_image.png i kod taki jak ten:

final WebView browser = (WebView) findViewById(R.id.my_webview); 
String html = new MyHelper(myObject).getHtml(); 
browser.loadDataWithBaseURL("", html, "text/html", "UTF-8", ""); 

Jeżeli String html ma coś takiego:

<html><head> 
<h1>Here is the image</h1> 
<img src="my_image.png" /> 
</head><html> 

Chodzi o to, co należy, że obraz src atrybut będzie odnosić się do obraz w /res/drawable?

+1

Znalazłem rozwiązanie, które działa dla mnie. Nie wiedziałem, jak załadować obrazy z/res/drawable, ale mogę skopiować obraz do/assets i odnosić się do obrazu według pliku: ///android_asset/my_image.png – MikeNereson

+0

Skopiowałem res/drawable/my_image. png to assets/my_image.png następnie użyj MikeNereson

Odpowiedz

30

To działało w Android 2.2

<img src = "file:///android_res/drawable/q1.png" /> 

gdzie q1.png znajduje się w folderze res/odkształcalne-hdpi

+0

** Motorola Zoom 3.2 ** Musiałem zrobić "plik:/android_res/drawable/app_icon_1.png". Ale może to być spowodowane tym, że zostało to wstawione do widoku przez Javacode za pomocą 'mWebView.addJavascriptInterface()'. –

+0

nie działa na 4.1 urządzenie – gregm

+0

działa na mnie dzięki :) +1 @Superfuzz –

5

Przyznaję, że nie wiem zbyt wiele na temat WebViews/HTML, ale wydaje mi się, że jedziesz na bardziej skomplikowaną trasę. Istnieje prosty sposób na załadowanie pliku HTML; umieść go w folderze zasobów, a następnie można go określić w następujący sposób.

WebView webView = new WebView(this); 
webView.loadUrl("file:///android_asset/index.html"); 
setContentView(webView); 

Oczywiście Twój układ jest bardziej skomplikowane, jak masz więcej niż tylko WebView więc nie można użyć setContentView() bezpośrednio, ale to podstawowa idea. Następnie odwołać obraz w pliku HTML, użyłem <img> tag tak:

<img src="res/drawable/icon.png"/> 

to działa dla Ciebie?

+0

jego wyłączony temat, ale loadUrl nie jest odpowiedni. Pobieram fragmenty HTML z jednej z naszych aplikacji, dekoruję ten HTML, a następnie wysyłam kod HTML do widoku. W tym konkretnym przypadku uzyskuję kod HTML, który ma znacznik object, który pokazuje FLV. Muszę zastąpić to znacznikiem zakotwiczenia do MP4 FLV. Znacznik zakotwiczenia zawiera obraz, przycisk odtwarzania. Ten przycisk odtwarzania jest zasobem, który próbuję wczytać. nie działa. – MikeNereson

+0

Hmm. Dziwne, że , jak opisano powyżej, nie działa, ale prawdopodobnie się myli z tym, gdzie znajduje się folder początkowy. W każdym razie, sądząc po twoich komentarzach bezpośrednio do pytania, wydaje się, że znalazłeś sposób na rozwiązanie tego problemu. Cieszę się, że pomógł mi komentarz na temat folderu z zasobami, nawet jeśli wybieram inny utwór! –

+0

Chociaż rozwiązanie Superfuzz wydaje się działać na Android2.2 +, podejście to wydaje się być skalowalne z powrotem do Androida 1.6. Przetestowano w emulatorze. Przy okazji +1 dla Steve'a Haleya, może nigdy nie przyszedłbym do tej rundy o rozwiązaniu bez tego posta. – Samuel

0

Mam dokładnie ten sam problem, ale ani umieszczenie pliku obrazu w res/drawable (który po raz pierwszy miał do tworzenia, ja hust miał odkształcalne-hdpi, -ldpi i -mdpi już istniejących) lub za pomocą file:///asset/ URL pracował dla mnie .

Oto co robię:

aktywny:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mWebView = (WebView) findViewById(R.id.webview); 
     mWebView.getSettings().setJavaScriptEnabled(true); 
     String summary = "<html><body><div style=\"background:red; width:300px; height:50px;\"></div><img src=\"res/drawable/banner300.jpg\"/></body></html>"; 
     mWebView.loadData(summary, "text/html", "utf-8"); 

Następnie w res/drawable Umieściłem banner300.jpg - ale to nie pojawi się. Jakieś pomysły?

2

Z moich testów ścieżka „file: /// android_res/odkształcalne/Q1 .png "działa tylko z wersją 2.2+. W przypadku wersji 2.1, która daje błąd braku pliku. Przeniesienie zasobu do zasobów będzie działało, ale nie jest to możliwe, jeśli chcesz korzystać z funkcji do rysowania (co oznacza, że ​​potrzebujesz kopii obrazu w każdym folderze ...).

-3

można załadować kanału alfa jak byś nigdzie indziej w kodzie ... http://developer.android.com/guide/topics/resources/drawable-resource.html

Resources res = getResources(); 
Drawable drawable = res.getDrawable(R.drawable.myimage); 

również @MikeNereson używając Android, można tylko bezpośredni dostęp do surowych plików, które znajdują się w katalogu aktywów i SDCard .

+0

... a przez dostęp rozumiem możliwość manipulowania, zmiany, przesyłania i usuwania. Oznacza to, że gdy plik znajdzie się w folderze do rysowania, zawsze będzie tam, chyba że go jawnie usuniesz i przekompilujesz swój plik APK. Twój użytkownik nigdy nie będzie mógł nic zrobić z obrazem. – rf43

+3

Co ta odpowiedź ma wspólnego z wyświetlaniem obrazu z HTML wyświetlanego w WebView? –

3

użytkownik302750,

Twoja metoda jest niepoprawna. res/drawable/banner300.jpg powinien być file:///android_res/drawable/banner300.jpg.

banner300.jpg może znajdować się w jednym z następujących miejsc w projekcie, a Android automatycznie załaduje właściwy dla używanego urządzenia.

  • res/drawable/banner300.jpg
  • res/drawable-ldpi/banner300.jpg
  • res/drawable-mdpi/banner300.jpg
  • res/drawable-hdpi/banner300.jpg
  • res/drawable-xhdpi/banner300.jpg

Folder assets jest dla zasobów ogólnych, które nie potrzebują różne wersje. Przykładem może być szablon XSL lub coś podobnego.

MikeNereson, twoja odpowiedź na twój problem jest również niepoprawna, zasoby do pobrania powinny być zawarte w katalogu res.

Oto przykład z mojego własnego projektu. I wyjście html, dokładnie tak:

<img src="file:///android_res/drawable/stats_btn.png"/> 

W przypadku korzystania z urządzenia ldpi, otrzymuję ldpi obraz, jeśli przy użyciu hdpi lub mdpi, uzyskać odpowiednią jeden dla tych, jak również. Android rozwiązuje file:///android_res/drawable/stats_btn.png jeden z następujących zasobów, które mam w moim projekcie.

  • ./res/drawable-ldpi/stats_btn.png
  • ./res/drawable-hdpi/stats_btn.png
  • ./res/drawable-mdpi/stats_btn.png
2

Odpowiedzi udziałem file: // URL nie może pracować dłużej jak Android 4.0. Zobacz odpowiedź na this question. Sposób, który zadziała, jest w odpowiedzi: here.