android – sans-serif-light with“fake bold”

我为我的应用设置了以下主题:

<style name="AppTheme" parent="Theme.Sherlock.Light">
    <item name="android:textViewStyle">@style/RobotoTextViewStyle</item>
</style>

<style name="RobotoTextViewStyle" parent="android:Widget.TextView">
    <item name="android:fontFamily">sans-serif-light</item>
</style>

因此,当我创建一个TextView时,我得到了我想要的“roboto light”字体.但是,有些TextViews,我想设置textStyle =“bold”属性,但它不起作用,因为light字体没有“native”(?)粗体变体.

另一方面,如果我以编程方式使用setTypeface方法,我可以得到一个粗体字体:

textView.setTypeface(textView.getTypeface(), Typeface.BOLD);

这个字体来自roboto灯,看起来非常好.

我想要这个大胆的字体,但我想知道最优雅的方式是什么.

>可以单独使用xml吗?
>如果我需要创建“BoldTextView extends TextView”,那么最佳实现是什么?

最佳答案 我最终为它创建了一个类:

public class FakeBoldTextView extends TextView {

    public FakeBoldTextView(Context context) {
        super(context);
        setTypeface(getTypeface(), Typeface.BOLD);
    }

    public FakeBoldTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setTypeface(getTypeface(), Typeface.BOLD);
    }

    public FakeBoldTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setTypeface(getTypeface(), Typeface.BOLD);
    }

}

并在XML中使用它像这样:

<the.package.name.FakeBoldTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Example string" />
点赞