gpt4 book ai didi

android - 如何为具有可下载字体的 WebView 设置 FontFamily?

转载 作者:行者123 更新时间:2023-12-03 17:34:05 25 4
gpt4 key购买 nike

我目前重构了我的应用程序以使用可下载字体,因此我没有任何字体 Assets 文件。我搜索了很多,我看到的唯一解决方案是将 FontFamily 设置在 CSS 文件中并将 src 指向 assets 文件夹。这对于可下载的字体是不可能的。

最佳答案

使用 Android Downloadable Font 时,可以从 FontInfo.getUri() 获取 ttf 字体文件的 URI方法。

FontsContractCompat.FontFamilyResult fontFamilyResult = FontsContractCompat.fetchFonts(view.getContext(), null, fontRequest);
Uri fontUri = fontFamilyResult.getFonts()[0].getUri();

您可以使用此 URI 将 ttf 文件缓存在您的应用程序空间中,您可以在 WebView HTML 和其他地方直接引用该文件。

如果要改用 URI 模型,请注意不能直接使用 FontsContractCompat 返回的 URI,因为加载的内容和此 URI 的基域不同,这可能违反 CORS 策略。您可以在 WebView HTML 中使用自定义 URI 模式并在 WebViewClient 的 中拦截该请求。应该拦截请求 您可以从 FontsContractCompat 查询或本地缓存的字体文件返回的 URI 中返回 InputStream(包装为 WebResourceResponse )的方法。

像这样在 css 中形成 URI(需要将 myappscheme://com.myapp.demo 设置为内容的基本 url)
@font-face {
font-family: Roboto;
src: url('myappscheme://com.myapp.demo/fonts/name=Roboto');
}

在 WebViewClient 中。这只是一个演示代码 fragment 。所以在这里抛出一些错误处理
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)
{
Uri requestUri = request.getUrl();
if (requestUri.getScheme()
.equals("myappscheme") && requestUri.getPath()
.startsWith("fonts"))
{
Context context = view.getContext();
File fontFile = new File(context.getExternalCacheDir(), requestUri.getQueryParameter("name") + ".ttf");
if (!fontFile.exists())
{
FontRequest fontRequest = new FontRequest(
"com.google.android.gms.fonts",
"com.google.android.gms",
requestUri.getQuery(),
R.array.com_google_android_gms_fonts_certs);

FontsContractCompat.FontFamilyResult fontFamilyResult = FontsContractCompat.fetchFonts(view.getContext(), null, fontRequest);
if (fontFamilyResult.getStatusCode() == FontsContractCompat.FontFamilyResult.STATUS_OK)
{
InputStream gFont = context.getContentResolver()
.openInputStream(fontFamilyResult.getFonts()[0].getUri());
fontFile.createNewFile();
ByteStreamsKt.copyTo(gFont, new FileOutputStream(fontFile), 4096);
}
}
return new WebResourceResponse("application/octet-stream", null, new FileInputStream(fontFile));
}
}

关于android - 如何为具有可下载字体的 WebView 设置 FontFamily?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49662888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com