webview的自定义字体

我正在尝试为我的Web视图build立一个新的自定义字体(otf文件)。

我把资产文件anbaaarabic_bold.otf。

我是这样做的:

String head = "<head><style>@font-face {font-family: 'verdana';src: url('file://"+ getActivity().getFilesDir().getAbsolutePath()+ "/anbaaarabic_bold.otf');}body {font-family: 'verdana';}</style></head>"; String htmlData= "<html>"+head+"<body style=\"font-family: verdana\">"+body+"</body></html>" ; mBodyArticle.loadDataWithBaseURL("http://nada", htmlData, "text/html", "utf-8", ""); 

body:包含我的html代码。

我不知道为什么字体不适合我的webview。 body html字体不会更改。

Solutions Collecting From Web of "webview的自定义字体"

有一个Android的错误报告似乎表明,自定义字体不适用于某些语言(泰语,希伯来语,波斯语和阿拉伯语已被提及)。 谷歌任何人都没有证实这一点,但也有一些人报告了同样的问题。

build议的解决scheme之一(至less有一个用户确认工作)是将字体从otf转换为svg。 有一些在线工具可以为你做( 一切字体就是一个例子),但是你可能会遇到一个版权问题 – 确保你的字体许可证允许这样的转换。

另外,当你转换字体的时候,在文本编辑器中打开它,并检查svg元素是否是命名空间。 它应该看起来像这样:

 <svg xmlns="http://www.w3.org/2000/svg"> 

如果只是没有名称空间的<svg> ,则可能需要手动添加xmlns属性。 显然,没有命名空间的svg字体也不起作用。

要获取放置在/assets文件夹中的文件的URI,您需要使用:

 file:///android_asset/file_name 

试试下面的代码:

 String head = "<head><style>@font-face {font-family: 'verdana';src: url('file:///android_asset/anbaaarabic_bold.otf');}body {font-family: 'verdana';}</style></head>"; String htmlData= "<html>"+head+"<body style=\"font-family: verdana\">"+body+"</body></html>" ; mBodyArticle.loadDataWithBaseURL("http://nada", htmlData, "text/html", "utf-8", ""); 

确保使用确切的文件名(区分大小写)。

你的手机是否有机会运行Android 2.1?

2.1中有一个已知的错误 。 因此,自定义字体将不适用于2.1。 但是这应该是1.5,1.6和2.2。

你可以在这里find更多的信息。

这是一个如何使用html为webview设置字体的例子。 在这个视图中,在HTMLstring中设置字体并使用webview加载。 把字体放在assests文件夹中。

在这里输入图像说明

每个Android设备有默认的字体。通过使用字体是要求给你的应用程序外观和感觉良好。点击这里了解更多关于字体

步骤:1创build一个新的Android应用程序项目,并将这些代码复制到xml文件activity_main.xml中:]

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <WebView android:id="@+id/webViewFace" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> 

步骤:2在src文件夹中创build一个MainActivity.java并复制这些代码

 package com.androidtoppers.typeface; import android.app.Activity; import android.os.Bundle; import android.view.Window; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends Activity { WebView mWebView; String htmlstr1="<p style='text-align:right'><H2>Android Toppers</H2></p> <p style='text-align:left'>It is safer to use a JSON parser to convert a JSON text to a JavaScript object.</p>"; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activtiy_main); mWebView = (WebView) findViewById(R.id.webViewFace); mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // TODO Auto-generated method stub view.loadUrl(url); return true; } }); String head1 = "<head><style>@font-face {font-family: 'arial';src: url('file:///android_asset/fonts/bichkam.ttf');}body {font-family: 'verdana';}</style></head>"; String text="<html>"+head1 + "<body style=\"font-family: arial\">" + htmlstr1 + "</body></html>"; mWebView.loadDataWithBaseURL("", text, "text/html", "utf-8", ""); } } 

有关更多详细信息,请参阅此链接: http : //velmuruganandroidcoding.blogspot.in/2014/08/set-typeface-for-webview-in-android.html

试试这个链接

  <title>example</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style type="text/css">@font-face {font-family: MyCustomFont; src: url(file:///android_asset/Bamini.otf)}body {font-family: MyCustomFont, Verdana, Arial, sans-serif; font-size: medium; color: black}</head><body> <h1>tamilStringEncoded </h1></body></html> 

我猜getActivity().getFilesDir().getAbsolutePath()不会让你进入你的字体所在的资产文件夹,所以字体的变化被忽略,因为它没有find当我使用自定义字体,我用这个paththis.getAssets() + "your_font_name.otf"

我使用的代码:

 Typeface type = Typeface.createFromAsset(this.getAssets(), fontName); ((TextView) findViewById(R.id.textView1)).setTypeface(type);