2014-07-16 16 views
6

Ho trovato molte domande per impostare il tipo di carattere su webview. Ho provato che non riesco a riparare.come impostare il tipo di carattere per la webview

Ho 10 file html nella mia cartella delle assest. In swipe mi sto visualizzando uno ad uno in webview, fino a quando non funziona, ora ho bisogno di cambiare il tipo di carattere (per tutte le pagine html che im caricano 10 file). Come posso cambiare il tipo di carattere del mio html visualizzato in webview.

primo modo

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

secondo modo

ho ottenere il contenuto di HTML e ho passato in una stringa, non posso in grado di passare in esso, se il contenuto passato correttamente questo funzionerà.

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

e nella mia attività

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

       } 
      }); 
     } 
    } 

ho bisogno di passare questo page nel codice sopra

terzo modo

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\"})()"); 
       } 
      }); 

Ho cercato in questo modo. Non riesco a cambiare il tipo di carattere. Qualcuno ha un'idea per favore condividilo. Sto lavorando a questo problema da due giorni. Grazie in anticipo.

risposta

4

È possibile farlo in due modi

  1. Se il pulsante è parte di html allora si può chiamare una funzione JavaScript sul click evento
  2. Utilizzando il pulsante di Android è possibile richiamare una funzione JavaScript che aggiornerà carattere famiglia

Ecco esempio: 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

Se si sta facendo questo con secondo metodo è sufficiente chiamare changeFont() da WebView Android per questo è necessario chiamare mainContent.loadUrl("javascript:changeFont()")

EDIT
Se è così si può provare questo: myWebView.loadUrl("javascript:document.getElementById('navigationText')style.fontFamily ='"+fontName+"');

+0

ho un file statico, sto trovandolo da db e visualizzato in webview usando la posizione .. –

+0

ho provato a modificare il codice .. non funziona –

+1

sì è funzionato .. leggera modifica come questa .. 'mainC ontent.loadUrl ("javascript: document.getElementById ('maindiv'). style.fontFamily = 'courier';"); 'dovresti il' fontname' nelle virgolette singole @JaiSoni –

Problemi correlati