Typeface fontRobo = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-Black.ttf"); viewTotalValue.setText(total.toString()); - 2Unfortunately this is not possibleA.S.– A.S.2014-03-27 13:56:03 +00:00Commented Mar 27, 2014 at 13:56
- possible duplicate of Accessing a font under assets folder from XML file in AndroidSiruk Viktor– Siruk Viktor2014-03-27 14:00:29 +00:00Commented Mar 27, 2014 at 14:00
- 1If you dont want to do this to every TextView you can create class that extends TextView and set your Typeface in there. Then you can use that class in your xml files like com.your.customview.package.CustomFontTextView.vilpe89– vilpe892014-03-27 14:00:44 +00:00Commented Mar 27, 2014 at 14:00
3 Answers
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" /> 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:
Comments
Extending TextView just for setting font looks so expensive and not good. 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.