Typeface fontRobo = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Black.ttf");
viewTotalValue.setText(total.toString());
答案 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。你的字体和字体实例之间的依赖关系。