我发现很多问题要将字体类型设置为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\"})()");
}
});
我试过这样的。我无法更改字体类型。任何人都有想法请分享。我这两天来一直处理这个问题。 在此先感谢。
答案 0 :(得分: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+"');