为webview设置自定义字体时,字体样式无效。

5

Main.java:

Main instanceMain = this;
    String Dataz = FN.getHtmlData(instanceMain,"BMitra",20,(getResources().getString(R.string.matn2)));
    btne.loadDataWithBaseURL("file:///android_asset/", Dataz, "text/html", "utf-8", null);

FN.java:

public static String getHtmlData(Context context,String fontname,Integer fontsize, String data){
    String head = "<head><style type=\"text/css\">@font-face {font-family: 'MYFNT';src: url('"+fontname+".ttf');} body {text-align:justify;font-family: 'MYFNT';color: Black;}</style></head>";
    String htmlData= "<html>"+head+"<body dir=\"rtl\">"+data+"</body></html>" ;
    return htmlData;
 }

strings.xml:

<string name="matn2">
    <![CDATA[
    <html><body><b>سلام</b> non bold text . <b>english bold</b></body></html>
    ]]>
</string>

但是粗体标签不起作用,输出结果为: سلام english bold . 非粗体文本

顺便提一下,我发现某些报告问题


另一种方式:

Main.java:

Main instanceMain = this;
    String Dataz = FN.getHtmlData(instanceMain,getResources().getString(R.string.matn2)));
    btne.loadDataWithBaseURL("file:///android_asset/", Dataz, "text/html", "utf-8", null);

FN.java:

public static String getHtmlData(Context paramContext, String paramString)
  {
    return "<!DOCTYPE HTML><html lang=\"fa-ir\" dir=\"rtl\"><head>" + "<link rel=\"stylesheet\" type=\"text/css\" href=\"justified_textview.css\" />" + "</head>" + "    <body>" + paramString + "</body></html>";
  }

justified_textview.css(在资源文件夹中):

/*@font-face {
font-family:"MyFont";
src:url('file:///android_asset/BMITRA.TTF');
}

@font-face {
font-family:"MyFont";
src:url('file:///android_asset/BMITRABD.TTF');
font-weight: bold;
}*/

@font-face {
font-family: 'Conv_BMITRA';
src: url('file:///android_asset/BMITRA.ttf');
font-weight: normal;
font-style: normal;
}

@font-face {
font-family: 'Conv_BMITRA';
src: url('file:///android_asset/BMITRABD.ttf');
font-weight: bold;
font-style: normal;
}


body {
font-family:'Conv_BMITRA';
text-align:justify;
line-height: 20pt;  
color: Black;      
}

并且 matn2(strings.xml):

<string name="matn">
    <![CDATA[
    م ولادت توی وب با سی اس اس
    normal text
    <b>ولایت بولد م bold text</b>
    ]]>
    </string>

现在它能够运行在安卓2.3.3或2.3.5,但是无法在安卓4.0.x上运行。


你试过用CSS进行样式设计吗? - Flo
1
@Flo 是的,不起作用。顺便说一下,当在CSS中写入.boldClass{text-weight:bold}时,aapt.exe停止工作并崩溃了。甚至当写入这样:b{text-weight:bold}在CSS中时,它还是不起作用! - CooL i3oY
2个回答

5

这是因为Webview的问题而不是Android操作系统的问题,所以无法实现。如果您为Webview设置自定义字体,则在某些设备和Android操作系统上它可以正常工作,而在另一些设备上则不行,很遗憾。


2

我在显示一个非常大的页面时遇到了同样的问题。尝试在manifest中将webview的activity设置为android:hardwareAccelerated="false"


1
与WebView相关的是什么?你能详细解释一下吗? - CooL i3oY
1
我不确定 webview 具体受到硬件加速绘图的影响,但有些函数不支持硬件加速。这里有更多相关信息:Android 硬件加速。一些不受支持或已知行为不同的功能与文本绘制有关。 - Chris Feist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接