【发布时间】:2019-03-01 03:22:30
【问题描述】:
我正在尝试在 TextView 上使用自定义字体。 TextView 文本设置为 textView1.setText(Html.fromHtml(htmlText));
html 包含粗体和斜体跨度
现在。我购买了自定义字体。该字体带有 3 个不同的文件 (ttf)。一种用于常规,一种用于粗体和斜体。
如何将这三个字体文件应用到 textview?
【问题讨论】:
标签: android
我正在尝试在 TextView 上使用自定义字体。 TextView 文本设置为 textView1.setText(Html.fromHtml(htmlText));
html 包含粗体和斜体跨度
现在。我购买了自定义字体。该字体带有 3 个不同的文件 (ttf)。一种用于常规,一种用于粗体和斜体。
如何将这三个字体文件应用到 textview?
【问题讨论】:
标签: android
此链接将帮助您了解如何自定义 android 字体:http://mobile.tutsplus.com/tutorials/android/customize-android-fonts/
其中涉及到如何将这些字体文件应用到 textview 中,您需要先将它们集成到您的项目中:
Typeface tf = Typeface.createFromAsset(this.getAssets(),
"fonts/xxx.TTF");
txt1.setTypeface(tf);
ttf文件应该放在--> assets/fonts/xxx.TTF
所有需要的细节都在段落中:“使用自定义字体”
【讨论】:
setTypeface 只能设置一种字体,因此只能使用一种样式。 Eli Konky 我需要的是在单个 TextView 中使用多个字体文件。
对于 API 16+,现在最好的方法是定义一个字体资源文件,如果你使用 v26 以上的支持库或新的 AndroidX 库,基本上你在字体文件夹中添加你的普通和斜体 ttf 字体文件并创建一个字体资源xml,基本上让它看起来像
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
app:fontStyle="normal"
app:fontWeight="400"
app:font="@font/custom_regular_font" />
<font
app:fontStyle="italic"
app:fontWeight="400"
app:font="@font/custom_italic_font" />
<font
app:fontStyle="normal"
app:fontWeight="700"
app:font="@font/custom_bold_font" />
</font-family>
最后一个是粗体字体,假设 custom_font_family.xml 以 android:fontFamily="@font/custom_font_family" 的形式将这个 xml 应用到您的文本视图,现在您使用 fromHtml 设置的具有三种跨度类型中的任何一种的任何 html 文本都将使用适当的字体,在需要时,这甚至可以让您拥有一个自定义字体系列,混合完全不同的字体,而不必完全来自同一个系列。
【讨论】:
我想您想对代码进行快速重构以合并资产。
我会扩展 TextView 并尝试解析 HTML 并在 onDraw 应用正确的字体。
覆盖setText 并解析参数,为字符和应使用的正确字体创建映射。
然后,覆盖onDraw,在绘制之前,根据您在上一步创建的地图更改super.getPaint()的字体。
代码应该看起来像How to correctly draw text in an extended class for TextView? 中的onDraw 方法中的代码,但是您将设置先前确定的字体而不是应用super.getTypeface()。
希望对你有帮助
【讨论】:
您是否尝试将所有字体一一应用到相同的 textView 文本。 我认为您可以将更多效果应用于相同的 TextView。
Milos 的代码是正确的。 另外,我已经提出了自己的解释。 您可以将字体添加到 assets 文件夹中,然后您可以将该字体逐一应用到 textView。
不确定,但可能对您有用。
我的代码:
Typeface font1 = Typeface.createFromAsset(getAssets(), "YOUR_FONT1.ttf");
Typeface font2 = Typeface.createFromAsset(getAssets(), "YOUR_FONT2.ttf");
Typeface font3 = Typeface.createFromAsset(getAssets(), "YOUR_FONT3.ttf");
chips_text.setTypeface(font1);
chips_text.setTypeface(font2);
chips_text.setTypeface(font3);
随时发表评论和查询。
【讨论】: