Пользовательский шрифт для веб-просмотра
Я пытаюсь установить новый пользовательский шрифт (файл 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", "");
Убедитесь, что вы используете точное имя файла (с учетом регистра).
Ответ 3
Неужели ваш телефон работает под управлением Android 2.1?
Существует известная ошибка в 2.1. В результате пользовательские шрифты не будут работать в 2.1. Но это должно работать на 1,5, 1,6 и 2,2.
Вы можете найти более подробную информацию здесь.
Ответ 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);