how to set Android Typeface from xml

旧时模样 提交于 2019-12-12 09:11:10

问题


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

回答1:


You could create your own TextView by overriding the TextView like this:

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));
    }
}

And use it like this:

<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"
        />



回答2:


You could create a custom class that extends TextView, let's say FontTextView.

Define a special string attribute for that class, let's say "font".

Then, in your FontTextView constructor based on the value of the font attribute, choose the appropriate Typeface from your assets.

See:

  • Creating a View Class Google Tutorial
  • Defining custom attributes SO Post



回答3:


Extending TextView just for setting font looks so expensive and doesn't The most clear way is to use Android Data-Binding Framework and 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);
}

declaration in 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"/>

or use resources integers same way

In your cache/creator helper determine dependencies between R.attr.Your Font and instance of typeface.



来源:https://stackoverflow.com/questions/22689779/how-to-set-android-typeface-from-xml

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!