如何将字体类型设置为webview

Mak*_*ple 6 html fonts android 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);
Run Code Online (Sandbox Code Playgroud)

第二种方式

我已经获得了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);
Run Code Online (Sandbox Code Playgroud)

在我的活动中

  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);

                }
            });
        }
    }
Run Code Online (Sandbox Code Playgroud)

我需要将其传递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\"})()");
                }
            });
Run Code Online (Sandbox Code Playgroud)

我试过这样的.我无法更改fonttype.任何人都有想法请分享.我这两天来一直在研究这个问题.提前致谢.

Jai*_*oni 4

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

  1. 如果您的按钮是 html 的一部分,那么您可以在单击事件上调用 JavaScript 函数
  2. 使用 Android 按钮,您可以调用 JavaScript 函数来更新字体系列

这是示例: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;}
Run Code Online (Sandbox Code Playgroud)

html:索引.html

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

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