如何将字体类型设置为webview

时间:2014-07-16 08:39:17

标签: android html fonts webview

我发现很多问题要将字体类型设置为webview。我已经尝试过我无法修复。

我的assest文件夹中有10个html文件。在webview中一个接一个地显示滑动,直到它的工作正常,现在我需要按钮点击更改字体类型(对于我加载10个文件的所有html页面)。如何在webview中更改我的html显示的字体类型。

第一路

  mainContent.getSettings().setJavaScriptEnabled(true);
            WebSettings webSettings = mainContent.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setBuiltInZoomControls(true);
            mainContent.requestFocusFromTouch();
            mainContent.setWebViewClient(new WebViewClient());
            mainContent.setWebChromeClient(new WebChromeClient());
            mainContent.loadUrl("file:///android_asset/"+filename.get(position));
       Typeface font = Typeface.createFromAsset(getAssets(), "myfont.ttf"); 
            webSettings.setFixedFontFamily(font);
            webSettings.setDefaultFontSize(20);

第二路

我已经获得了html的内容,并且我已经传入一个字符串,我无法传递给它,如果内容正确传递,这将有效。

   mainContent.getSettings().setJavaScriptEnabled(true);
            WebSettings webSettings = mainContent.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setBuiltInZoomControls(true);
            mainContent.requestFocusFromTouch();
            mainContent.setWebChromeClient(new WebChromeClient());
            mainContent.loadUrl("file:///android_asset/"+filename.get(position));
            mainContent.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    mainContent.setWebViewClient(null);    
           mainContent.loadUrl("javascript:window.HTMLOUT.processHTML('<div>'+document.getElementsByTagName('div')[0].innerHTML+'</div>');");
                     String pish = "<html><head><style type=\"text/css\">@font-face {font-family: MyFont;src: url(\"file:///android_asset/fonts/Kelvetica.ttf\")}body {font-family: MyFont;font-size: medium;text-align: justify;}</style></head><body>";
                     String pas = "</body></html>";     
                     String myHtmlString = pish + page + pas;   // here i can't able to get the `page`
                     mainContent.loadDataWithBaseURL(null,myHtmlString, "text/html", "UTF-8", null);

和我的活动

  class MyJavaScriptInterface {
        @SuppressWarnings("unused")
        public void processHTML(final String html) {
            runOnUiThread(new Runnable() {
                public void run() {
                     Spanned page = Html.fromHtml(html);
                     System.out.println("content"+page);

                }
            });
        }
    }

我需要将此page传递给上面的代码

第三种方式

  mainContent.getSettings().setJavaScriptEnabled(true);
            WebSettings webSettings = mainContent.getSettings();
            webSettings.setJavaScriptEnabled(true);
            webSettings.setBuiltInZoomControls(true);
            mainContent.requestFocusFromTouch();
            mainContent.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT"); 
           mainContent.loadUrl("file:///android_asset/"+filename.get(position));
            mainContent.setWebViewClient(new WebViewClient() {
                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    mainContent.setWebViewClient(null);
                    mainContent.loadUrl("javascript:(function() { var s=document.createElement('style');s.innerHTML ="
                                + " '@font-face{font-family:ZawGyi-One;src:url('file:///android_asset/fonts/zeroesthree.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\"})()");
                }
            });

我试过这样的。我无法更改字体类型。任何人都有想法请分享。我这两天来一直处理这个问题。 在此先感谢。

1 个答案:

答案 0 :(得分:4)

你可以用两种方式做到这一点

  1. 如果您的按钮是html的一部分,那么您可以在点击事件
  2. 上调用JavaScript函数
  3. 使用Android按钮可以调用将更新字体系列的JavaScript函数
  4. 以下是示例: CSS font_first.css:

    .box_heading{
            width:340px;
            text-align:center;
            font-family:Arial, Helvetica, sans-serif;
            color:#000;
            font-size:20px;
            font-weight:normal;
            margin-top:14px;
            float:left;
            text-transform:uppercase;}

    Html:index.html

    如果您使用第二种方法执行此操作,则只需从android webview调用changeFont()即可调用mainContent.loadUrl("javascript:changeFont()")

    编辑
    如果是这样,您可以尝试:myWebView.loadUrl("javascript:document.getElementById('navigationText')style.fontFamily ='"+fontName+"');