Lokalen HTML-Inhalt mit Hilfe einer WebView anzeigen

  • Antworten:4
Petra Ritter
  • Forum-Beiträge: 81

15.12.2019, 10:45:02 via Website

Guten Morgen,

Ich möchte in einer App einen Inhalt als HTML-Page anzeigen.

Irgendwie komme ich mit dem Aufruf der HTML-Datei in der MainActivity.java nicht zurecht.

Ich habe Folgendes gemacht:

  • im Projekt unter app ein neunen Assets-Folder angelegt und dort die
  • HTLM-Datei reinkommen in der entsprechenden Layout-Datei eine WebView erstellt.
  • In der MeinActivity habe die Zeile import android.webkit.WebView; eingefügt
    • verschiedene Sachen ausprobiert wie ich den HTML-Inhal angezeigt bekomme. Ohne Erfolg :-(

Nun habe ich zwei Fragen:

  • Muss man auch wenn die HTML-Datei lokal gespeichert ist in der Datei AndroidManifest.xml den Zugriff auf das internet erlauben? Würde eigentlich gerne darauf verzichten.
  • Was habe ich da nicht richtig standen

Ihr könnt hier das Projekt ansehen.

Vielen Dank im Voraus für Eure Hilfe.

Ein schönes Wochenende wünscht Petra aus der Schweiz.

— geändert am 15.12.2019, 10:50:07 durch Moderator

Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.12.2019, 11:27:10 via Website

Hallo Petra,

dein Code dürfte so garnicht compilen.
Deine WebView initalisierung musst du in der OnCreate durchführen:

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate (savedInstanceState);

        setContentView (R.layout.activity_main);
 WebView web =(WebView)findViewById(R.id.webview);
web.loadUrl("file:///android_asset/index.html");
    }

Zudem solltest du für andere Layouts andere Activities ode Fragments verwenden. Alle Layouts mit setContentView in der MainActivity zu laden ist keine gute Idee und bringt dir auf dauer nur komplexität und unübersichlichkeit

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Petra Ritter
Kommentieren
Petra Ritter
  • Forum-Beiträge: 81

15.12.2019, 13:03:45 via Website

Hallo Pascal,

Erstmal Danke für die Hilfe.
Ich weiss, dass der Code nicht so ganz ist wie der sein sollte. Ist aber mein erstes Projekt das ich selbständig zu realisieren versuche.

Es funktioniert in Prinzip auch.

Eigentlich war meine Ansicht, dass ich über die activity_main.xml die Layout-Datei mit der WebView über einen Button aufrufen kann.

image

Momentan wird der HTML Inhalt nur angezeigt wenn die .xml-Datei mit der WebView direkt aufgreifen wird, nicht aber wenn die entsprechende Datei über einen Button aufgerufen wird.

Bin mir aber gerade am überlegen, ob die App neu Scheiben soll und schauen dass der Code überreichter wird.

Ich schaue mir mal das Templete Fragments + ViwModul in Android Studio an.
Denke, dass das ein Anfang ist für das was ich erreichen möchte.

Petra

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.12.2019, 13:30:33 via App

Genau, entweder Fragmente oder für die WebView eine eigene Activity das sollte auch schon reichen.
Auf Button klicken dann per Intent die Activity aufrufen

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

15.12.2019, 16:17:55 via Website

Hallo auch ein kleiner Beitrag von mir.
Wenn du willst das deine Webview auch bei den Button klick aufgerufen wird solltest du auch die Installierung der Webview in der entsprechenden OnClick Methode machen und nicht im Kassen Rupf.

Das dein loadURL rot ist wie du im anderen Forum schreibst.
https://android-developers.de/thread/8015-locales-html-file-in-ein-android-projekt-einbinden/?s=a07d0b4e3ed791a0a3d5635bcbad7cc452dbb7c9
Liegt daran das du es an der falschen stelle machst. Bei Android keine Statement im KassenRump.
Wenn du das Findviewbyid machst muss auch das richtige Layout geladen sein.
Im Klassen Rumpf ist noch gar keines geladen nicht mal das falsche.

public void loadLists(View v) {

    setContentView (R.layout.load_webview);
    WebView web =(WebView)findViewById(R.id.webview);
    web.loadUrl("file:///android_asset/index.html");

}

Ansonsten stimme ich mit dem was Pascal sagte überein.

Hilfreich?
Pascal P.
Kommentieren