vivo手机系统默认字体覆盖web字体的问题

项目需要用到一款自定义的特殊字体,在其他手机上都可以正常显示,换到vivo x7,x9上测试时,发现部分字符可以显示,其他的都是错的。我修改了手机的系统自定义字体后,web字体又可以正常显示了,据此认为应该是系统的字体优先级高于web字体,导致了这个问题。

请教各位道友,有没有什么针对webview或者x5的配置,可以覆盖掉系统字体的优先级,或者某些特殊的css或者html属性,能够解决这一问题?

阅读 5.4k
1 个回答

一个CSS足矣,简单粗暴,只是加载时会有延迟:
(dog.tff为你要加载的字体文件)

/* 以下在你的onPageFinished方法中: */
view.loadUrl( "javascript:!function(){" +
          "s=document.createElement('style');s.innerHTML="
          + "\"@font-face{font-family:dog;src:url('**injection**/dog.ttf');}*{font-family:dog !important;}\";"
          + "document.getElementsByTagName('head')[0].appendChild(s);" +
          "document.getElementsByTagName('body')[0].style.fontFamily = \"dog\";}()" );

/* 以下在你的shouldInterceptRequest方法中: */
@Override
public WebResourceResponse shouldInterceptRequest( final WebView view, String url )
{
    if ( url.contains( "**injection**/" ) )
    {
        try {
            return(new WebResourceResponse( "application/x-font-ttf",
                            "UTF8", new FileInputStream( "/sdcard/dog.ttf" ) ) );
        } catch ( FileNotFoundException e ) {
            e.printStackTrace();
        }
    }
    return(super.shouldInterceptRequest( view, url ) ); /* 正常加载 */
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题