Comment utiliser une police personnalisée avec WebView
maintenant je veux afficher quelques caractères unicode et j'ai utilisé l'étiquette: <font face="
Arial">something here</font>
. Mais il semble que WebView
ne peut pas trouver L'Arial
font parce que je ne peux voir que les caractères OVNI. Est-ce que je dois copier arial.ttf à
quelque part ou comment puis-je utiliser cette police TrueType avec WebView
? Grâce.
10 réponses
loadData
n'a pas fonctionné pour moi non plus, donc j'ai utilisé file:///android_asset
dans le chemin src.
ça a marché avec loadDataWithBaseURL
!
pour cet exemple j'ai changé le CSS en:
@font-face {
font-family: 'feast';
src: url('fonts/feasfbrg.ttf');
}
body {font-family: 'feast';}
ensuite, utilisez le chemin des actifs comme url de base:
loadDataWithBaseURL("file:///android_asset/",myhtml,"text/html","utf-8",null);
apparemment, vous pouvez utiliser une police personnalisée pour WebView
, comme @raychung ci-dessus suggéré. Mais cela ne fonctionnera pas pour 2.1 (Bug est rapporté ici ). Cela devrait fonctionner pour 1.5, 1.6 et 2.2.
vous pouvez mettre votre fichier de police TTF personnalisé dans votre dossier /assets
, puis dans votre fichier CSS vous pouvez mettre:
@font-face {
font-family: "myIPA";
src: url('IPA.TTF');
}
.phon, .unicode
{
display: inline;
font-family: 'myIPA', Verdana, sans-serif;
font-size: 14pt;
font-weight: 500;
font-style:normal;
color: black;
}
vous pouvez maintenant faire référence à ce style de police dans votre fichier HTML.
vous pouvez le faire fonctionner sur toutes les versions en copiant le fichier de police à partir de vos ressources à votre dossier de fichiers lors du premier lancement de l'application, puis référence comme:
"@font-face {
font-family: cool_font;
src: url('file://"+ getFilesDir().getAbsolutePath()
+ "/cool_font.ttf');
}"
@font-face {
font-family: 'MyCustomFont';
src: url('/assets/fonts/MaycustomFont.ttf')
}
ça me va.
->src
->assets
->fonts
->MaycustomFont.ttf
->..
->res
j'ai utilisé ci-dessous le code pour la direction de rtl avec police persan, j'espère que quelqu'un a utilisé ce code ou quelqu'un me suggère la meilleure façon. merci
String myCustomStyleString="<style type=\"text/css\">@font-face {font-family: MyFont;src: url(\"file:///android_asset/fonts/BYEKAN.ttf\")}body,* {font-family: MyFont; font-size: medium;text-align: justify;}</style>";
webView.loadDataWithBaseURL("", myCustomStyleString+"<div style=\"direction:rtl\">"+myHtm+"</div>", "text/html", "utf-8", null);
cela n'a pas fonctionné pour moi, j'ai dû lier la police sur mon serveur web au lieu d'utiliser la référence à un fichier local:
@font-face {
font-family: 'feast';
src: url('http://yoursite.com/tutorial/css/feasfbrg.ttf');
}
body {font-family: 'feast';}
cela fonctionne très bien pour moi sur tous les appareils sur lesquels je l'ai testé.
placez vos fichiers de police dans / src/main/assets / fonts, puis utilisez cette méthode:
public class HTMLUtils {
public static String getLocalFontInHTML(String html, String fontFamily, String fontFileName) {
return "<!DOCTYPE html>\n" +
"<html>\n" +
"<head>\n" +
"<style>" +
"@font-face {" +
"font-family: " + fontFamily + ";" +
"src: url('" + fontFileName + "');" +
"}" +
"* {font-family: '" + fontFamily + "' !important;}" +
"* {font-size: 1rem !important;}" +
"</style>" +
"</head>\n" +
"<body>\n" +
html +
"\n" +
"</body>\n" +
"</html>";
}
}
comme suit
webView.loadDataWithBaseURL("file:///android_asset/", HTMLUtils.getLocalFontInHTML(item.text, Config.FONT_FAMILY, Config.REGULAR_FONT),"text/html", "UTF-8", null);
où
public static final String FONT_FAMILY = "Montserrat";
public static final String REGULAR_FONT = "fonts/Montserrat-Regular.otf";
Espère que cela aide quelqu'un!
si vous voulez garder la taille de la police de votre code html supprimer
"* {font-size: 1rem !important;}"
ont à l'esprit que 1rem est équivalent à environ 14sp
L'idée de base est que la page web doit avoir accès au fichier de police. C'est pourquoi la solution originale suggérée fonctionne lorsque le fichier HTML et le fichier font se trouvent dans le dossier assets, et que le fichier HTML est chargé à partir de là.
ce n'est pas une fonctionnalité Android, c'est CSS, donc devrait fonctionner avec N'importe quel SDK Android.
le chargement de la police à partir du dossier files devrait fonctionner aussi, si le fichier font est vraiment là et le chemin correct vers lui est donné dans le style. Mais tho approche est messier, il faut écrire le code pour copier le fichier, puis le code pour déterminer l'emplacement du fichier.
je suis très heureux d'avoir tout simplement le contenu HTML et le fichier de police dans les actifs, et de charger à partir de là.
webView.loadUrl("file:///android_asset/content.html");
css
@font-face { font-family: cool_font; src: url('cool_font.ttf'); }