如何从xml设置Android Typeface

时间:2014-03-27 13:55:46

标签: android android-typeface

Typeface fontRobo = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Black.ttf");
viewTotalValue.setText(total.toString());

3 个答案:

答案 0 :(得分:18)

您可以通过覆盖TextView来创建自己的TextView:

public class MyTextView extends TextView {

    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setType(context);
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        setType(context);
    }

    public MyTextView(Context context) {
        super(context);
        setType(context);
    }

    private void setType(Context context){
        this.setTypeface(Typeface.createFromAsset(context.getAssets(),
                    "foo.ttf"));

        this.setShadowLayer(1.5f, 5, 5, getContext().getResources().getColor(R.color.black_shadow));
    }
}

并像这样使用它:

<com.your.project.package.MyTextView
        android:id="@+id/oppinfo_mtv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"  
        android:text="Player 1"
        />

答案 1 :(得分:3)

您可以创建一个扩展TextView的自定义类,假设为FontTextView

为该类定义一个特殊的字符串属性,假设为“font”。

然后,在FontTextView构造函数中,根据font属性的值,从您的资源中选择适当的Typeface

请参阅:

答案 2 :(得分:2)

扩展TextView只是为了设置字体看起来如此昂贵,并没有 最明确的方法是使用Android Data-Binding Framework和BindingAdapter:

@BindingAdapter("bind:font")
public static void setTypeface(TextView textView, int index) {
    Typeface myTypeface = //retrieve typeface from cache, based on some font index
    textView.setTypeface(myTypeface);
}
xml中的

声明:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:font="@{R.attr.Proxima_Nova_Regular}" 
/>

attrs.xml:

<attr name="Proxima_Nova_Regular"/>
<attr name="Proxima_Nova_Black"/>    
<attr name="Proxima_Nova_Bold"/>

或以相同的方式使用资源整数

在你的缓存/创建者助手中确定R.attr。你的字体和字体实例之间的依赖关系。