Теперь я хочу отобразить некоторые символы Юникода, и я использовал тег: <font face="
Arial">something here</font>
. Но похоже, что WebView
не могу найти шрифт Arial, потому что я вижу только символы НЛО. Нужно ли мне куда-то копировать arial.ttf или как использовать этот шрифт TrueType с WebView
? Спасибо.
Как использовать собственный шрифт с WebView
Ответы (10)
loadData
у меня тоже не сработало, поэтому я использовал file:///android_asset
в пути src.
Это сработало с loadDataWithBaseURL
!
В этом примере я изменил CSS на:
@font-face {
font-family: 'feast';
src: url('fonts/feasfbrg.ttf');
}
body {font-family: 'feast';}
Затем используйте путь к ресурсам в качестве базового URL:
loadDataWithBaseURL("file:///android_asset/",myhtml,"text/html","utf-8",null);
strings.xml
. Итак, я создал строковую константу с указанным выше значением css, и она смогла показать эффект настраиваемого шрифта. Спасибо!
- person Mahendra Liya; 18.09.2012
Очевидно, вы можете использовать собственный шрифт для WebView
, как предлагал @raychung выше. Но это не сработает для 2.1 (об ошибке сообщается здесь ). Это должно работать для 1.5, 1.6 и 2.2.
Вы можете поместить свой TTF-файл с пользовательским шрифтом в папку /assets
, а затем в свой CSS-файл вы можете вставить:
@font-face {
font-family: "myIPA";
src: url('IPA.TTF');
}
.phon, .unicode
{
display: inline;
font-family: 'myIPA', Verdana, sans-serif;
font-size: 14pt;
font-weight: 500;
font-style:normal;
color: black;
}
Теперь вы можете ссылаться на этот стиль шрифта в своем HTML-файле.
.ttf
и .html
в один и тот же каталог и загружаю их в браузер Android, он работает. Однако в моем приложении WebView, пока отображается CSS, текст отображается шрифтом Android по умолчанию, несмотря на добавление .ttf
в папку assets
проекта. Я тестирую 2.3.5, но строю против 2.1. Может быть, это проблема или что-то мне не хватает?
- person Paul Lammertsma; 13.09.2011
view.loadUrl()
работает, а view.loadData()
- нет. Я понятия не имею, почему последний не делает.
- person Paul Lammertsma; 13.09.2011
src:url('file:///android_asset/TAHOMA.TTF')
, и он сработал
- person Bobs; 19.08.2013
Вы можете заставить его работать во всех версиях, скопировав файл шрифта из ваших ресурсов в папку с файлами при первом запуске приложения, а затем сославшись на него как:
"@font-face {
font-family: cool_font;
src: url('file://"+ getFilesDir().getAbsolutePath()
+ "/cool_font.ttf');
}"
File f = new File(getFilesDir(), "coolFont.ttf"); if (f.length() == 0) { InputStream myInput = this.getAssets().open("fonts/coolFont.ttf"); String outFileName = "coolFont.ttf"; OutputStream myOutput = new FileOutputStream(getFilesDir() + "/" + outFileName); byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } myOutput.flush(); myOutput.close(); myInput.close(); }
- person Felipe Martinez Carreño; 05.07.2011
/data/data/[package]/files
моего приложения, и хотя WebView стилизован в соответствии с CSS, текст просто не отображается в желаемом шрифте. Я использую Android 2.1 и тестирую 2.3.5. Любая подсказка, что дает?
- person Paul Lammertsma; 13.09.2011
@font-face {
font-family: 'MyCustomFont';
src: url('/assets/fonts/MaycustomFont.ttf')
}
Меня устраивает.
->src
->assets
->fonts
->MaycustomFont.ttf
->..
->res
Я использовал приведенный ниже код для направления rtl с персидским шрифтом, надеюсь, кто-то использовал этот код или кто-то подскажет мне лучший способ. Благодарность
String myCustomStyleString="<style type=\"text/css\">@font-face {font-family: MyFont;src: url(\"file:///android_asset/fonts/BYEKAN.ttf\")}body,* {font-family: MyFont; font-size: medium;text-align: justify;}</style>";
webView.loadDataWithBaseURL("", myCustomStyleString+"<div style=\"direction:rtl\">"+myHtm+"</div>", "text/html", "utf-8", null);
У меня это не сработало, мне пришлось связать шрифт на моем веб-сервере вместо использования ссылки на локальный файл:
@font-face {
font-family: 'feast';
src: url('http://yoursite.com/tutorial/css/feasfbrg.ttf');
}
body {font-family: 'feast';}
У меня это отлично работает на всех устройствах, на которых я его тестировал.
Поместите файлы шрифтов в / src / main / assets / fonts, затем используйте этот метод:
public class HTMLUtils {
public static String getLocalFontInHTML(String html, String fontFamily, String fontFileName) {
return "<!DOCTYPE html>\n" +
"<html>\n" +
"<head>\n" +
"<style>" +
"@font-face {" +
"font-family: " + fontFamily + ";" +
"src: url('" + fontFileName + "');" +
"}" +
"* {font-family: '" + fontFamily + "' !important;}" +
"* {font-size: 1rem !important;}" +
"</style>" +
"</head>\n" +
"<body>\n" +
html +
"\n" +
"</body>\n" +
"</html>";
}
}
следующее
webView.loadDataWithBaseURL("file:///android_asset/", HTMLUtils.getLocalFontInHTML(item.text, Config.FONT_FAMILY, Config.REGULAR_FONT),"text/html", "UTF-8", null);
где
public static final String FONT_FAMILY = "Montserrat";
public static final String REGULAR_FONT = "fonts/Montserrat-Regular.otf";
Надеюсь, это кому-то поможет!
Если вы хотите сохранить размер шрифта в HTML-коде, удалите
"* {font-size: 1rem !important;}"
Имейте в виду, что 1 бэр эквивалентна примерно 14 ст.
Как сказал Фелипе Мартинес Карреньо, вы можете копировать из активов, и это будет работать.
Дополнительную информацию можно найти в этом Детали
Основная идея заключается в том, что веб-страница должна иметь доступ к файлу шрифта. Вот почему предлагаемое оригинальное решение работает, когда и HTML-файл, и файл шрифта находятся в папке с ресурсами, а HTML-файл загружается оттуда.
Это не функция Android, это CSS, поэтому он должен работать с любым Android SDK.
Загрузка шрифта из папки файлов также должна работать, если файл шрифта действительно существует и правильный путь к нему указан в стиле. Но этот подход более беспорядочный, нужно написать код для копирования файла, а затем код, чтобы выяснить местоположение файла.
Я очень рад, что HTML-контент и файл шрифта находятся в активах и загружаются оттуда.
webView.loadUrl("file:///android_asset/content.html");
использовать css
@font-face { font-family: cool_font; src: url('cool_font.ttf'); }