我想更改WebView字体。 “assets”文件夹中有2个文件。他们是:
assets / fonts / DejaVuSans.ttf和
资产/ CSS / result.css
我在StackOverflow上搜索了一些答案并找到了解决方案,但它不起作用。 result.css使用@ font-face指令加载DejaVuSans.ttf。然后它包括在<链接>传递给WebView :: loadDataWithBaseURL的数据标记(代码如下)。 问题是CSS样式有效(文本为红色)但字体不是。当我显示语音符号时会出现方形字符(/'pə:sn /)。
String resultText = "<html><head>";
resultText += "<link href=\"css/result.css\"" + " rel=\"stylesheet\" type=\"text/css\" />";
resultText += "<style>" + "@font-face { font-family: \"DejaVuSans\"; " + "" +
"src: url('file:///android_asset/fonts/DejaVuSans.ttf'); }</style>";
resultText += "</head>";
resultText += "<body><p>" + text + "</p>" + "</body></html>";
resultView.loadDataWithBaseURL("file:///android_asset/", resultText, "text/html", "utf-8", null);
result.css:
@font-face {
font-family: "DejaVuSans";
/*src: url('fonts/DejaVuSans.ttf'); also not work*/
src: url('file:///android_asset/fonts/DejaVuSans.ttf');
}
body {
color: red;
}
System.out.println(resultText)是:
<html><head><link href="css/result.css" rel="stylesheet" type="text/css" /><style>@font-face { font-family: "DejaVuSans"; src: url('file:///android_asset/fonts/DejaVuSans.ttf'); }</style></head><body><p>person /'pə:sn/</p></body></html>
答案 0 :(得分:17)
它解决了。我没有在主体选择器中添加“font-family”,字体url必须是file:///android_asset/fonts/DejaVuSans.ttf“。
@font-face {
font-family: 'DejaVuSans';
/* src: url('DejaVuSans.ttf'); This doesn't work */
/* src: url('fonts/DejaVuSans.ttf'); Neither is this */
src: url('file:///android_asset/fonts/DejaVuSans.ttf'); /* but this does */
}
body {
font-family: 'DejaVuSans';
color: red;
}
答案 1 :(得分:4)
2.0和2.1的已知错误:
http://code.google.com/p/android/issues/detail?id=4448
对于2.2:
@font-face {
font-family: 'FontName';
src: url('filefont.ttf'); // with no "fonts/"
}
答案 2 :(得分:0)
我使用cufon替换不支持我本地字体的设备。 我写了一个javascript函数来确定是否需要cufon
requiresCufon : function(){
var version = window.navigator.userAgent.match(/Android\s+([\d\.]+)/);
var MINIMUM_OS_FONTFACE = 2.2;
if(typeof version != 'undefined'){
//strip non digits
version = version[0].replace(/[^0-9\.]/g, '');
//if version is less than required for @font-face then cufon
if(parseFloat(version) < MINIMUM_OS_FONTFACE)
return true;
else
return false;
}
else{
return true;
}
},