更改已加载Android站点的字体WebView

更改已加载Android站点的字体WebView,android,css,fonts,webview,Android,Css,Fonts,Webview,我已经找了好几天了,但找不到解决问题的办法。请看一看: 输入:已加载web的web视图 输出:更改WebView中加载的web的字体 到目前为止,我所做的是: @SuppressLint("SetJavaScriptEnabled") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.la

我已经找了好几天了,但找不到解决问题的办法。请看一看:

  • 输入:已加载web的web视图
  • 输出:更改WebView中加载的web的字体
到目前为止,我所做的是:

    @SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mWebView = (WebView) findViewById(R.id.webview);
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.setWebViewClient(new WebViewClient());
    mWebView.loadUrl("http://www.bbc.co.uk/");
然后,这就是我在webview中更改字体的方式: 1/方式1:

        mWebView.loadUrl("javascript:(function() { var s=document.createElement('style');s.innerHTML ="
            + " '@font-face{font-family:ZawGyi-One;src:url(\"http://db.tt/OQ1RZoWc\");}"
            + "body,div,h1,h2,h3,input,textarea{font-family:ZawGyi-One! important;}';"
            + "document.getElementsByTagName('head')[0].appendChild(s);document.getElementsByTagName('body')[0].style.fontFamily = \"ZawGyi-One\"})()");
2/方式2:

mWebView.loadDataWithBaseURL(
            null,
            "<script>javascript:(function() { var s=document.createElement('style');s.innerHTML ="
                    + " '@font-face{font-family:ZawGyi-One;src:url(\"http://db.tt/OQ1RZoWc\");}"
                    + "body,div,h1,h2,h3,input,textarea{font-family:ZawGyi-One! important;}';"
                    + "document.getElementsByTagName('head')[0].appendChild(s);document.getElementsByTagName('body')[0].style.fontFamily = \"ZawGyi-One\"})() </script>",
            "text/html", "UTF-8", null);
但不幸的是,我的解决方案都不管用。尽管我试图在die/assets/folder中更改html文件,并且字体存储在/assets/fonts/folder中,但我无法完成此操作

**还有一个问题:是否真的可以在已经加载的webview站点中更改字体样式?有人,请引导我

我很感激你的大力帮助。

看看这个答案

或者试试这个演示项目


希望它能对你有所帮助。

最后,我终于明白了:

1/如果不更改网页内容,则无法更改字体。 WebView基本上是一种显示网页的视图,网页可以是静态的(如html)或动态的。但它不会改变网页的外观和感觉。因此,它将显示与网页完全相同的文本。如果您需要更改字体,则必须在网页中更改字体(可能是html)

(来自)

2/另一个解决方案是从webview的渲染引擎更改字体,对于Chrome应用程序,现在应该是Blink,或者互联网应用程序,应该是Webkit

因此,如果有人面临与我相同的问题,我的一点建议是找到解决方法,您通常没有足够的时间或授权在webview的渲染引擎上进行更改。:)


祝你有愉快的一天。

看看这个答案。。。。希望对你有帮助。谢谢!但这些主题是关于在/assets/folder中更改脱机html站点的字体样式,我的意思是当该站点加载到webview时更改联机web(as)的字体样式。你或其他人能帮帮我吗?!?先谢谢你。
        mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onPageFinished(view, url);

            mWebView.loadUrl("javascript:(function() { var s=document.createElement('style');s.innerHTML ="
                    + " '@font-face{font-family:ZawGyi-One;src:url('file:///android_asset/fonts/BLKCHCRY.TTF');}"
                    + "body,div,h1,h2,h3,input,textarea{font-family:ZawGyi-One! important;}';"
                    + "document.getElementsByTagName('head')[0].appendChild(s);document.getElementsByTagName('body')[0].style.fontFamily = \"ZawGyi-One\"})()");

        }
    });