我正在尝试为我的网络视图建立一个新的自定义字体(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", "");
正文:包含我的HTML代码。
我不知道为什么字体不能用于我的webview。 body html字体不会改变。
答案 0 :(得分:10)
Android上有bug report似乎表明自定义字体不适用于某些语言(已提及泰语,希伯来语,波斯语和阿拉伯语)。谷歌的任何人都没有证实这一点,但有很多人报告了同样的问题。
其中一个建议的解决方案(至少有一个用户确认工作)是将字体从otf转换为svg。有许多在线工具会为您执行此操作(Everything Fonts就是一个示例),但您可能会遇到受版权保护的字体问题 - 请确保您的字体许可证允许此类转换。
此外,转换字体后,在文本编辑器中打开它并检查svg元素是否为命名空间。看起来应该是这样的:
<svg xmlns="http://www.w3.org/2000/svg">
如果只有<svg>
没有命名空间,则可能需要手动添加xmlns属性。显然,没有命名空间的svg字体也不起作用。
答案 1 :(得分:4)
要获取放置在/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", "");
确保使用确切的文件名(区分大小写)。
答案 2 :(得分:2)
答案 3 :(得分:2)
这是如何使用html为webview设置字体的示例。在此视图中,在HTML String中设置字体并使用webview加载。将字体放在assests文件夹中。
每个拥有默认字体的Android设备。使用字体都需要让您的应用程序外观和感觉良好。点击此处了解有关字体的更多信息
步骤:1创建一个新的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文件夹中创建一个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
答案 4 :(得分:0)
试试此链接
<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>
答案 5 :(得分:-1)
我猜getActivity().getFilesDir().getAbsolutePath()
没有让你进入你的字体所在的资源文件夹,所以字体的更改只是被忽略,因为它找不到
当我使用自定义字体时,我使用路径this.getAssets() + "your_font_name.otf"
我使用的代码:
Typeface type = Typeface.createFromAsset(this.getAssets(), fontName);
((TextView) findViewById(R.id.textView1)).setTypeface(type);