我想更改加载到WebView中的html字符串的字体,类似于本问题中提到的:
如何在Android中更改Webview的字体?
不同之处在于,我并没有使用旧的方法将字体文件存储在assets文件夹中,而是将它们存储在res/font中,如“Fonts in XML”android字体支持文档中所述:
https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html
现在,我显然不能使用:
<代码>file:///android_asset/fonts/my_font.otf
我尝试了:
<代码>file:///android_res/font/my_font.otf
还有许多其他的方法来描述res/font文件夹中我的字体的路径,但它们都不起作用。
如果我的字体存储在res/font文件夹中,如何为加载html字符串的Web视图使用自定义字体系列?
//编辑:
我当前无法正常工作的实现是:
@BindingAdapter("loadData")
public static void loadData(WebView webView, String htmlData) {
webView.loadDataWithBaseURL(null, htmlData, "text/html", "utf-8", null);
}
@BindingAdapter({"loadData", "fontFamily"})
public static void loadData(WebView webView, String htmlData, @FontRes int fontFamilyId) {
TypedValue value = new TypedValue();
ApplicationActivity.getSharedApplication().getResources().getValue(fontFamilyId, value, true);
String fontPath = value.string.toString();
File fontFile = new File(fontPath);
String prefix = "<html>\n"
+"\t<head>\n"
+"\t\t<style type=\"text/css\">\n"
+"\t\t\t@font-face {\n"
+"\t\t\t\tfont-family: 'CustomFont';\n"
+"\t\t\t\tsrc: url(\"file:///android_res/font/"+fontFile.getName()+"\")\n"
+"\t\t\t}\n"
+"\t\t\tbody {\n"
+"\t\t\t\tfont-family: 'CustomFont';\n"
+"\t\t\t}\n"
+"\t\t</style>\n"
+"\t</head>\n"
+"\t<body>\n";
String postfix = "\t</body>\n</html>";
loadData(webView, prefix + htmlData + postfix);
}
您可以像这样使用自定义res字体-
<head>
<style type="text/css">
@font-face {
font-family: MyFont;
src: url("file:///res/font/myfont.ttf")
}
body {
font-family: MyFont;
}
</style>
我设法从res/font
目录加载我的本地字体。在我的示例中,我想加载斜体字opensans。
我的设置如下:
css prettyprint-override"> @font-face {
font-family: 'opensans';
src: url("file:///android_res/font/opensans_italic.ttf")
}
body {
font-family: 'opensans';
font-weight: 400;
}
使用loadDataWithBaseUrl加载WebView,例如:
webView。loadDataWithBaseURL(null,您的HTMLcontent,“text/html”,“utf-8”,null)
但我在我的html内容顶部有这个:"
我希望它也适用于你的情况。
编辑:
将其添加到proguard配置中,使其在发布模式下工作。
<代码>-保持类com。你的包裹名称R$font{*;}
刚刚尝试过,其工作原理与从资源加载字体类似,只需更改基本url以指向资源即可。
HTML示例
<html>
<head>
<style>
@font-face {
font-family: 'CustomFont';
src: url('font/CustomFont.ttf');
}
#font {
font-family: 'CustomFont';
}
</style>
</head>
<body>
<p>No Font</p>
<br />
<p id="font">Font</p>
</body>
使用Webview#loadDataSusBaseURL(String, String, String, String, String)
将此超文本标记语言加载到webview中,使用file://android_res/
作为基本url(第一个参数)
例子:
webview.loadDataWithBaseURL("file:///android_res/", html, "text/html", "utf-8", null)
编辑:
如果您在发布版本中使用proGuard,您需要添加额外的规则来防止R
类在ProGuard过程中被重命名,否则WebView将无法找到字体资源。详细信息可以在这篇文章中找到
当我将资产/字体中的自定义字体应用于本地html时。我只是像下面这样设置字体@font-face{font-Family:'my'字体;src: url('file:///android_asset/fonts/my'字体);}但是,当我使用loadUrl(“远程html url”)时,上面的代码不起作用。有一个好主意吗? 下面的链接显示本地字体和本地html的示例代码。如何在Android中更改
我在整个React本机应用程序中使用自定义字体。我使用react-native-link命令链接了它们。除了Android的Webview组件之外,它们在任何地方都可以工作。它在iOS Webview中正常工作。 我已经尝试使用url("file:///android_assets/fonts/Lohit-Gujarati")在webview css中创建一个字体面。它不起作用。导入谷歌字体css
是否可以在我的Android应用程序中包含TTF字体(Arial),以便外部加载网页的CSS使用? 比如说我的网站http://www.some-site.com它有一个CSS文件,包含以下内容: 我还尝试将字体的url src设置为以下值,但它们都不起作用: 我知道如果Arial是这样的话,这是可行的。ttf文件与服务器上的CSS文件位于同一目录中,但我想做的是能够使用Arial。ttf,位于我
@font-face跟其在CSS中作用表现一样,在后面简单地添加个块状属性即可,类似下面: @font-face font-family Geo font-style normal src url(fonts/geo_sans_light/GensansLight.ttf) .ingeo font-family Geo 生成为: @font-face { font-famil
问题内容: 我的应用程序正在使用JSoup下载留言板页面的HTML(在这种情况下,它是包含给定线程帖子的页面)。我想使用此HTML,去除不需要的项目,并应用自定义CSS对其进行样式设置使其在WebView中“可移动”。 我应该在处理样式时将样式注入HTML中(因为无论如何还是要处理样式),还是有一种很好的方法将CSS文件添加到我的应用程序资产中并简单地引用它。我认为后者将是理想的,但不确定如何实现
问题内容: 我正在尝试在使用wkhtmltopdf生成的PDF中使用自定义字体。我读到您不能使用google webfonts,而wkhtmltopdf使用truetype .ttf文件。谁能确认?因此,我从Google webfont下载了一个.ttf文件,并将其放入服务器中,然后使用了字体: 和字体系列: 现在应该以Jolly Lodger字体呈现的文本根本没有出现,页面为空白。 我究竟做错了