Ich möchte die Standardschriftart von Webview in eine benutzerdefinierte Schriftart ändern. Ich verwende Webview bei der Entwicklung einer zweisprachigen Browser-App für Android.
Ich habe versucht, eine Instanz einer benutzerdefinierten Schriftart zu erhalten, indem ich meine benutzerdefinierte Schriftart in Assets platziert habe. Die Standardschriftart von Webview konnte jedoch immer noch nicht auf meine Schriftart eingestellt werden.
Folgendes habe ich versucht:
Typeface font = Typeface.createFromAsset(getAssets(), "myfont.ttf");
private WebView webview;
WebSettings webSettings = webView.getSettings();
webSettings.setFixedFontFamily(font);
Kann jemand dies korrigieren oder eine andere Methode vorschlagen, um die Standardschriftart von Webview in eine benutzerdefinierte Schriftart zu ändern?
Vielen Dank!
android
webview
font-face
custom-font
Dhanika
quelle
quelle
Antworten:
In diesem Projekt gibt es ein funktionierendes Beispiel dafür . Es läuft darauf hinaus:
assets/fonts
Platzieren Sie in Ihrem Ordner die gewünschte OTF- oder TTF-Schriftart (hier MyFont.otf).Erstellen Sie eine HTML-Datei, die Sie für den Inhalt von WebView verwenden, im
assets
Ordner (hier im Innerenassets/demo/my_page.html
):Laden Sie den HTML-Code aus dem Code in das WebView:
Beachten Sie, dass das Einfügen des HTML-Codes
loadData()
nicht zulässig ist. Gemäß Dokumentation :Wie @JaakL im folgenden Kommentar vorschlägt, sollten Sie zum Laden von HTML aus einer Zeichenfolge stattdessen die Basis-URL angeben, die auf Ihre Assets verweist:
Wenn Sie auf die Schriftart verweisen
htmlData
, können Sie diese einfach verwenden/fonts/MyFont.otf
(ohne die Basis-URL).quelle
res/font
Ordner. Was wäre dann der Weg? Ich habe es versucht,file:///android_res/font/
aber es scheint nicht zu funktionieren.Ich benutze diesen Code :
quelle
font-family: 'myface';
Noch einfacher ist es, das Asset-URL-Format zu verwenden, um auf die Schriftart zu verweisen. Keine Programmierung erforderlich!
...
quelle
.ttf
und.html
-Datei in dasselbe Verzeichnis lege und sie im Android-Browser lade, funktioniert es. In der WebView meiner App wird der Text, während das CSS angezeigt wird, in der Standardschriftart von Android angezeigt, obwohl er dem Ordner.ttf
des Projekts hinzugefügt wurdeassets/fonts
. Ich teste auf 2.3.5, baue aber gegen 2.1. Könnte das das Problem sein, oder fehlt mir etwas?view.loadUrl()
Works, währendview.loadData()
dies nicht der Fall ist. Ich habe keine Ahnung, warum letzteres nicht.Dies kann in Android erfolgen. Ich habe drei Tage gebraucht, um dieses Problem zu lösen. Aber jetzt scheint es sehr einfach. Führen Sie die folgenden Schritte aus, um die benutzerdefinierte Schriftart für Webview festzulegen
1. Fügen Sie Ihre Schriftart zum Ordner "Assets" hinzu.
2. Kopieren Sie die Schriftart in das Dateiverzeichnis der Anwendung
3. Sie müssen die obige Funktion nur einmal aufrufen (Sie müssen eine Logik dafür finden).
4.Verwenden Sie den folgenden Code, um den Wert für Ihre Webansicht festzulegen. Hier verwende ich CSS, um die Schriftart festzulegen.
5.Sie können die obige Funktion wie folgt aufrufen
quelle
Ich tat dies durch obere Antworten mit diesen Ergänzungen:
und dann verwenden
src: url("file:///android_asset/fonts/YourFont...
Danke an Alle:)
quelle
Viele der oben genannten Antworten funktionieren, wenn Sie Ihren Inhalt in Ihrem Assets-Ordner haben.
Wenn Sie jedoch möchten, dass ich alle Ihre Assets von einem Server in Ihren internen Speicher herunterlade und speichere, können Sie stattdessen
loadDataWithBaseURL
einen Verweis auf Ihren internen Speicher als baseUrl verwenden. Dann sind alle Dateien dort relativ zum geladenen HTML und werden gefunden und korrekt verwendet.In meinem internen Speicher habe ich folgende Dateien gespeichert:
Dann benutze ich folgenden Code:
Die im obigen HTML-Code (style.css) verwendete CSS-Datei:
Ich habe dies nur beim Targeting von minSdkVersion 19 (4.4) versucht, daher habe ich keine Ahnung, ob es auf anderen Versionen funktioniert
quelle
quelle
Sie müssen keine lokale ttf-Datei verwenden, um die Webview-Schriftart für Android festzulegen. Dadurch wird die gesamte App-Größe erhöht.
Sie können auch Online-Schriftarten wie die Schriftart von Google verwenden ... Dies hilft Ihnen, Ihre Apk-Größe zu reduzieren.
Beispiel: Besuchen Sie die folgende URL: https://gist.github.com/karimnaaji/b6c9c9e819204113e9cabf290d580551#file-googlefonts-txt
Sie finden die notwendigen Informationen, um diese Schriftart zu verwenden. Erstellen Sie dann einen String wie unten
Laden Sie dann die Webansicht wie folgt
getan. Auf diese Weise können Sie die Schriftart von der externen Quelle laden.
Was ist nun mit der App-Schriftart? Es ist nicht sinnvoll, 1 Schriftart für die Webansicht und eine andere Schriftart für die gesamte App zu verwenden. Sie können also herunterladbare Schriftarten in Ihrer App verwenden, die auch externe Quellen zum Laden von Schriftarten in die App verwendet.
quelle
Sie können dies mithilfe von CSS tun. Ich habe es mit einer App gemacht, aber es funktioniert nicht in Android 2.1, da es einen bekannten Fehler mit Android Browser 2.1 gibt.
quelle
Das Problem ist, dass es sich in einem Ordner befinden muss. Versuchen Sie stattdessen, "./myfont.ttf" einzufügen. Wenn Sie die Schriftart nicht in einem Ordner in Assets wie "fonts / myfont.ttf" ablegen, funktioniert dies mit Sicherheit.
quelle
teste es, arbeite für mich wie ein Zauber:
quelle
Wenn Sie Schriftarten
res/font
wie ich unterlegen , können Sie das Verzeichnis wie folgt ändern: -quelle
Verwenden Sie die Bibliothek https://github.com/delight-im/Android-AdvancedWebView .
in HTML-Daten:
in xml:
in Java:
quelle
So laden Sie htmlData in eine Webansicht:
Dabei wird
getHtmlData(activity,**htmlData**)
eine Zeichenfolge mit HTML-Code zurückgegeben.quelle