Je veux changer la police par défaut de la vue Web en une police personnalisée. J'utilise Webview pour développer une application de navigateur bilingue pour Android.
J'ai essayé d'obtenir une instance de police personnalisée en plaçant ma police personnalisée dans les actifs. Mais je n'ai toujours pas pu définir la police par défaut de Webview sur ma police.
Voici ce que j'ai essayé:
Typeface font = Typeface.createFromAsset(getAssets(), "myfont.ttf");
private WebView webview;
WebSettings webSettings = webView.getSettings();
webSettings.setFixedFontFamily(font);
Quelqu'un peut-il corriger cela ou suggérer une autre méthode pour changer la police par défaut de la vue Web en une police personnalisée?
Merci!
android
webview
font-face
custom-font
Dhanika
la source
la source
Réponses:
Il y a un exemple concret de cela dans ce projet . Cela se résume à:
assets/fonts
dossier, placez la police OTF ou TTF souhaitée (ici MyFont.otf)Créez un fichier HTML que vous utiliserez pour le contenu de WebView, dans le
assets
dossier (ici à l'intérieurassets/demo/my_page.html
):Chargez le HTML dans la WebView à partir du code:
Notez que l'injection du HTML
loadData()
n'est pas autorisée. Selon la documentation :Comme @JaakL le suggère dans le commentaire ci-dessous, pour charger du HTML à partir d'une chaîne, vous devez plutôt fournir l'URL de base pointant vers vos actifs:
Lors du référencement de la police dans
htmlData
, vous pouvez alors simplement utiliser/fonts/MyFont.otf
(en omettant l'URL de base).la source
res/font
dossier. Quel serait le chemin alors? J'ai essayéfile:///android_res/font/
mais cela ne semble pas fonctionner.J'utilise ce code :
la source
font-family: 'myface';
Encore plus simple, vous pouvez utiliser le format URL de l'élément pour référencer la police. Aucune programmation nécessaire!
...
la source
.ttf
et.html
dans le même répertoire et le charge dans le navigateur Android, cela fonctionne. Cependant, dans WebView de mon application, alors que le CSS s'affiche, le texte apparaît dans la police par défaut d'Android malgré l'ajout.ttf
de auassets/fonts
dossier du projet . Je teste sur 2.3.5, mais je construis contre 2.1. Cela pourrait-il être le problème ou y a-t-il quelque chose qui me manque?view.loadUrl()
fonctionne, alors que ceview.loadData()
n'est pas le cas. Je n'ai aucune idée de pourquoi ce dernier ne le fait pas.Cela peut être fait sous Android. J'ai mis trois jours pour résoudre ce problème. Mais maintenant, cela semble très facile. Suivez ces étapes pour définir une police personnalisée pour Webview
1.Ajoutez votre police au dossier des actifs
2.Copiez la police dans le répertoire des fichiers de l'application
3.Vous devez appeler la fonction ci-dessus une seule fois (vous devez trouver une logique pour cela).
Utilisez le code ci-dessous pour définir la valeur de votre vue Web. Ici, j'utilise CSS pour définir la police.
5.Vous pouvez appeler la fonction ci-dessus comme ci-dessous
la source
J'ai fait cela par des réponses supérieures avec ces ajouts:
puis utilisez
src: url("file:///android_asset/fonts/YourFont...
Merci à tout le monde:)
la source
La plupart des réponses ci-dessus fonctionnent comme un charme si vous avez votre contenu dans votre dossier de ressources.
Cependant, si vous voulez comme moi télécharger et enregistrer tous vos actifs d'un serveur vers votre stockage interne, vous pouvez à la place utiliser
loadDataWithBaseURL
et utiliser une référence à votre stockage interne comme baseUrl. Ensuite, tous les fichiers seront relatifs au html chargé et seront trouvés et utilisés correctement.Dans ma mémoire interne, j'ai enregistré les fichiers suivants:
Ensuite, j'utilise le code suivant:
Le fichier CSS utilisé dans le html ci-dessus (style.css):
Je n'ai essayé cela qu'en ciblant minSdkVersion 19 (4.4) donc je n'ai aucune idée si cela fonctionne sur d'autres versions
la source
la source
Vous n'avez pas besoin d'utiliser le fichier ttf local pour définir la police de la vue Web pour Android, cela augmentera la taille de l'application.
vous pouvez également utiliser des polices en ligne comme la police de google ... Cela vous aidera à réduire la taille de votre apk.
Par exemple: visitez l'URL ci-dessous https://gist.github.com/karimnaaji/b6c9c9e819204113e9cabf290d580551#file-googlefonts-txt
Vous trouverez les informations nécessaires pour utiliser cette police. puis créez une chaîne comme ci-dessous
puis chargez la vue Web comme ceci
terminé. Vous pourrez ainsi charger la police depuis la source externe.
Maintenant, en ce qui concerne la police de l'application, il n'est pas logique d'utiliser une police pour la vue Web et une police différente pour l'ensemble de l'application. Vous pouvez donc utiliser des polices téléchargeables dans votre application, qui utilise également des sources externes pour charger des polices dans l'application.
la source
Vous pouvez le faire en utilisant CSS. Je l'ai fait avec une application mais cela ne fonctionnera pas sous Android 2.1 car il y a un bogue connu avec le navigateur Android 2.1.
la source
Le problème est qu'il doit être dans un dossier, essayez de mettre "./myfont.ttf" à la place, sinon mettez la police dans un dossier dans des actifs comme "fonts / myfont.ttf" qui fonctionnera à coup sûr.
la source
testez-le, travaillez pour moi comme un charme:
la source
Si vous mettez des polices sous
res/font
comme moi, vous pouvez changer le répertoire comme suit: -la source
Utilisez la bibliothèque https://github.com/delight-im/Android-AdvancedWebView .
dans les données html:
en xml:
en java:
la source
Voici comment charger htmlData dans une vue Web:
où
getHtmlData(activity,**htmlData**)
renvoie une chaîne de code html.la source