Пользовательский шрифт для веб-просмотра

Я пытаюсь установить новый пользовательский шрифт (файл 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-код.

Я не знаю, почему шрифт не работает для моего веб-просмотра. шрифт body html не изменяется.

Ответ 1

Существует отчет об ошибке для Android, который, по-видимому, предполагает, что пользовательские шрифты не работают на определенных языках (тайский, иврит, фарси, и арабский). Это не подтверждается никем от Google, но есть ряд людей, сообщающих о той же проблеме.

Одним из предложенных решений (по крайней мере, один пользователь подтвердил как работающий) было преобразование шрифта из otf в svg. Существует ряд онлайн-инструментов, которые сделают это для вас (Все шрифты - один из примеров), но у вас могут быть проблемы с тем, что это защищенное авторскими правами font - убедитесь, что ваша лицензия на шрифт позволяет такие преобразования.

Кроме того, когда вы преобразовали шрифт, откройте его в текстовом редакторе и проверьте, является ли элемент svg пространством имен. Он должен выглядеть примерно так:

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

Если это просто <svg> без пространства имен, вам может потребоваться добавить атрибут xmlns вручную. По-видимому, svg-шрифты без пространства имен тоже не работают.

Ответ 2

Чтобы получить URI для файла, помещенного в папку /assets, вам нужно будет использовать:

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

Убедитесь, что вы используете точное имя файла (с учетом регистра).

Ответ 4

Это пример того, как установить шрифт для webview с помощью html. В этом представлении установите шрифт в HTML String и загрузите webview. Поместите шрифт в папку assests.

enter image description here

Каждое устройство Android, имеющее шрифт по умолчанию. Использование шрифта необходимо для того, чтобы ваше приложение выглядело и чувствует себя хорошо. CLICK ЗДЕСЬ, чтобы узнать больше о шрифте

Шаг: 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 создайте MainActivity.java в папке src и скопируйте этот код

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

Ответ 5

Попробуйте эту ссылку

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

Ответ 6

Я думаю, getActivity().getFilesDir().getAbsolutePath() не попадает в папку с ресурсами, где находится ваш шрифт, поэтому изменение шрифта просто игнорируется, поскольку оно не найдено Когда я использовал пользовательские шрифты, я использовал путь this.getAssets() + "your_font_name.otf"

Код, который я использовал:

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