8

我正在尝试为我的 web 视图建立一个新的自定义字体(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 字体不会改变。

4

6 回答 6

11

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

建议的解决方案之一(至少有一位用户确认有效)是将字体从 otf 转换为 svg。有许多在线工具可以为您执行此操作(Everything Fonts就是一个示例),但您可能会遇到受版权保护的字体的问题 - 请确保您的字体许可证允许此类转换。

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

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

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

于 2013-08-15T16:08:18.137 回答
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", "");

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

于 2013-08-12T09:36:22.790 回答
3

这是一个如何使用 html 为 webview 设置字体的示例。在此视图中,在 HTML 字符串中设置字体并使用 webview 加载。将字体放在assets文件夹中。

在此处输入图像描述

每个 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

于 2014-09-05T18:42:35.880 回答
2

您的手机是否运行 Android 2.1?

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

您可以在此处找到更多信息。

于 2013-08-03T14:09:57.247 回答
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>
于 2013-12-11T06:49:06.190 回答
-3

我想getActivity().getFilesDir().getAbsolutePath()不会让你进入你的字体所在的资产文件夹,所以字体的变化只是被忽略了,因为它没有找到当我使用自定义字体时,我使用了路径this.getAssets() + "your_font_name.otf"

我使用的代码:

Typeface type = Typeface.createFromAsset(this.getAssets(), fontName);
((TextView) findViewById(R.id.textView1)).setTypeface(type);
于 2013-08-03T13:26:31.773 回答