使用HTML文本时字体资源无法正确使用字体

时间:2019-06-27 12:19:20

标签: android android-layout android-fonts

我在calligraphy之前使用Font resources,我们看到这已转移到Font资源,并且一切正常,如果我的文本视图内容是html和bold属性,我只会遇到一个问题( ),它没有突出显示,但是如果我通过xml删除了Font资源并使用编程方式,则它可以使用相同的字体。

我可以举个例子 我正在使用字体资源,如下所示

font_regular.xml

<?xml version="1.0" encoding="utf-8"?>
 <font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
    app:font="@font/myfont"
    app:fontStyle="normal"
    app:fontWeight="700"  />
</font-family>

我的文字视图

  <TextView
        app:fontFamily="@font/font_regular"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#000000"
        android:textSize="15sp"
        />

当我将其应用于包含粗体的html数据时,所有数据都来自服务器,作为html数据,例如以下示例数据

数据

<p>Hi i am <b>bold</b></p>

预期结果

嗨,我大胆

但是输出将是

嗨,我很胆大

字体已成功应用,但粗体部分没有变粗

但是当我通过Typeface以编程方式使用它的时候

以编程方式

 Typeface typeFace= Typeface.createFromAsset(context.getAssets(),
            "fonts/myfont.otf");

我用google搜索并浏览了我在google上看到的所有文档,但没有一个文档指向我如何通过字体资源实现此目的。

请帮助我了解我是否可以通过字体资源实现此目的

2 个答案:

答案 0 :(得分:2)

我使用此代码在某些应用中实现了类似的功能,并且确实有效。我希望这可以帮助

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    mDescTextView.setText(Html.fromHtml(myHtmlText, Html.FROM_HTML_MODE_COMPACT));
} else {
    Spanned myHtmlText = HtmlCompat.fromHtml(getContext(), myHtmlText, 0);
    mDescTextView.setText(myHtmlText);
}

好的。如果这对您不起作用,并且正如您所提到的,以编程方式添加字体时字体工作正常,那么在这种情况下,我有另一种选择。这可能不是您要查找的确切答案。但我认为从长远来看会有所帮助。无需以编程方式设置字体,也无需在xml中添加字体。使用您自己的textview类将在所有位置自动加载字体,也可以使用声明的属性(在values / attrs.xml中)设置粗细。

<com.youpackage.yourapp.view.customview.CustomTextView
    android:id="@+id/txt_email"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginStart="24dp"
    android:layout_marginEnd="24dp"
    android:hint="@string/label_full_name"
    app:customFontThickness="bold"
    android:inputType="textEmailAddress" />

有关自定义textview类和属性声明,请参见此。 https://github.com/pramodpmk/CustomTextView

答案 1 :(得分:-1)

添加此

String str =嗨,我是+“ ” +粗体+“ ”;
tv_view.setText(Html.fromHtml(str));