将 dimens.xml 中的尺寸应用于 Html.fromHtml 格式的文本

Applying dimensions from dimens.xml to text formatted with Html.fromHtml

我有这段代码用于设置 TextView 的文本:

TextView txt = new TextView(this);
txt.setText(Html.fromHtml("<b>" + m.getTitle() + "</b>" +  "<br />" + "<small>" + m.getText() + "</small>" + "<br />");

<small> 标记有效,但我想根据我在 dimens.xml 文件中定义的尺寸设置文本大小,我将其用于应用程序中的所有其他文本。通过 xml 布局添加 TextView 不是一种选择,因为我不知道我将添加多少个 TextView。

dimens.xml 文件中的维度设置为 <dimen name="text_size_320dp_small">16sp</dimen>

如何将这些尺寸应用到我的 Html.fromHtml 格式的文本?

非常感谢。

你为什么不使用 txt.setSizeText(yoursize)?但是,您可以使用此检索尺寸:

float yourDimen = getResources().getDimension(R.dimen.your_dimen_name);

不能直接,小标签创建一个RelativeSizeSpan,比例为.8f,硬编码到Html.fromHtml的实现中。

留下两个我可以看到的选项,将文本大小设置为 20sp(这将使小作品达到 16sp)。可能不太理想。

另一种选择是使用自定义标签 <mySmall>,将所有出现的 <small></small> 替换为 <mySmall>& </mySmall>。然后调用 fromHtml (String source, Html.ImageGetter imageGetter, Html.TagHandler tagHandler) with a TagHandler that integrates a AbsoluteSizeSpan 进入输出 Editable.

我自己测试了以下代码。你可以这样做。

txt.setText(Html.fromHtml("<b>" + m.getTitle() + "</b>" + "<br />" + "<font textsize=" + getResources().getDimension(R.dimen.text_size_320dp_small) + ">" + m.getText() + "</font>" + "<br />"));

[更新]:

刚刚提出一些参考和更新:

您可以将其存储在 strings.xml

<string name="mystring">&lt;font size = &quot;%s&quot;&gt;</string>

在代码中你可以这样写:

int sptopx = getResources().getDimensionPixelSize(R.dimen.text_size_320dp_small);
Spanned modified = Html.fromHtml( context.getString(R.string.mystring, sptopx) );
myTextView.setText(spanned);

TextView txt = new TextView(this);

        txt.setText(
        Html.fromHtml(
        "<b>" + m.getTitle() + "</b>" + 
        "<br />" + 
        modified + 
            ">" + m.getText() + "</font>" + 
            "<br />"
            )
            );

有关 html 标签支持的详细信息,您可以查看 this link