9

setTypeface用来设置文本粗体(或斜体,或其他字体属性)

TextView tv = findViewById(R.id.label);
...
tv.setTypeface(null,Typeface.BOLD);
...

如何仅删除粗体属性,而不更改迄今为止可能已设置的其他属性?

4

4 回答 4

22
tv.setTypeface(null,Typeface.NORMAL);

这会将样式设置为正常,而不会更改颜色或大小。

但是您不能以这种方式混合粗体/斜体/下划线文本。如果您指定 BOLD,则所有文本都将是粗体。如果你想混合文本的样式我建议使用 HTML 来设置文本的样式,然后使用下面的代码。

tv.setText(Html.fromHtml(yourStringAsHtml));
于 2013-06-23T13:44:01.110 回答
2

只需创建一个新的字体可以使boldnormal

tv.setTypeface(Typeface.create(tv.getTypeface(), Typeface.NORMAL), Typeface.NORMAL);
tv.invalidate();
于 2020-11-16T03:22:12.027 回答
1

像我一样,如果您想保留设置为 TextView 的自定义字体并删除 BOLD 属性,您可以尝试

tv.getPaint().setFakeBoldText(false)

执行以下操作删除了我设置为 TextView 的自定义字体。

tv.setTypeface(null,Typeface.NORMAL);
于 2018-08-02T00:42:55.820 回答
1

这段代码删除了旧的字体setTypeface(null,Typeface.NORMAL);

为了保持旧,你应该打电话

setTextViewStyle(textView, isBold);

private void setTextViewStyle(TextView view, boolean isBold){
    if (view == null)
        return;

    // if old typeface is null create new Typeface bold or def
    Typeface oldTypeface = view.getTypeface() != null ? view.getTypeface() :
            (isBold ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);

    view.setTypeface(
            Typeface.create(oldTypeface, isBold ? Typeface.BOLD : Typeface.NORMAL)
    );
}
于 2017-09-15T14:03:50.167 回答