1

I tried to add a custom font in my app. The method creating a typeface object and putting a font in it worked. Now I want to make a class for the custom font for having a cleaner code.

CustomFont.java

public class CustomFont extends AppCompatActivity { private final Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/Slabo.ttf"); public CustomFont(TextView textView) { textView.setTypeface(typeface); } } 

and now I am trying to add this font to a textview:

 public class MainActivity extends AppCompatActivity { private Typeface typeface; private CustomFont customFont; private TextView textview; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //typeface = Typeface.createFromAsset(getAssets(), "fonts/Slabo.ttf"); // works textview = (TextView) findViewById(R.id.textviewTest); //textview.setTypeface(typeface); // works customFont = new CustomFont(textview); // does not work } } 

but if I run this project I get this exception:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.AssetManager android.content.Context.getAssets()' on a null object reference 
0

6 Answers 6

1

Try This :

TextView text = (TextView) findViewById(R.id.custom_font); Typeface font = Typeface.createFromAsset(getAssets(), "yourfont.ttf"); text.setTypeface(font); 
Sign up to request clarification or add additional context in comments.

Comments

1

you can make method like below in your commonUtill class for better clarification

 public static void setTypeface(Context mContext, View view, VIEW_TYPE type, TYPE_FACE face, int bold) { View mView = view; Typeface tface = getTypeface(mContext, face); switch (type) { case TEXTVIEW: ((TextView) mView).setTypeface(tface, bold); break; case BUTTON: ((Button) mView).setTypeface(tface, bold); break; case EDITTEXT: ((EditText) mView).setTypeface(tface, bold); break; case RADIOBUTTON: ((RadioButton) mView).setTypeface(tface, bold); break; case CHECKBOX: ((CheckBox) mView).setTypeface(tface, bold); break; case CHECKEDTEXTVIEW: ((CheckedTextView) mView).setTypeface(tface, bold); break; default: break; } } 

and create function like this

public static enum TYPE_FACE { CALIBRI, ICON_FONT, BEBAS, AWESOME, BT, TAGLINE, CALLIBRI, WEBLYSLEEK, WEBLYSLEEK_BOLD, ICON_FONT1 } 

and your view method.

public static enum VIEW_TYPE { TEXTVIEW, BUTTON, EDITTEXT, RADIOBUTTON, CHECKBOX, CHECKEDTEXTVIEW } 

by this way you can easily manage your code.

Comments

0

first of all CustomFont should not be activity.It should be normal class.

public class CustomFont { private Typeface typeface; public CustomFont(Context context) { typeface = Typeface.createFromAsset(context.getAssets(), "fonts/Slabo.ttf"); } public void setFont(TextView textView) { textView.setTypeface(typeface); } } 

And call it from your MainActivity

customFont = new CustomFont(this); customFont.setFont(textview); 

Comments

0

Create Java class like this..

public class TextViewKarlaBold extends TextView { public TextViewKarlaBold(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(); } public TextViewKarlaBold(Context context, AttributeSet attrs) { super(context, attrs); init(); } public TextViewKarlaBold(Context context) { super(context); init(); } public void init() { Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/Karla-Bold.ttf"); setTypeface(tf, 1); } } 

Use this class as View in XML

 <hammerapps.views.TextViewKarlaBold // hammerapps.views is My Package name android:id="@+id/txtVIEW" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:gravity="center" android:text="VIEW" android:textColor="@color/black" android:textSize="12dp" /> 

Comments

0

Use this library if you want your entire application in a specific font Check here

Comments

0
Use Custom Textview public class TextView extends android.widget.TextView { Context mContext; String str; boolean isCorner; //fonts public static Typeface Font_name; public TextView(Context context) { super(context); mContext=context; initialiseFont(null); } public TextView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); mContext=context; TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.TextView, 0, 0); try { str = ta.getString(R.styleable.TextView_font_family); isCorner=ta.getBoolean(R.styleable.TextView_isCorner,false); } finally { ta.recycle(); } initialiseFont(str); } private void initialiseFont(String font) { if(font==null || font.equals("")){ } else { Font_name = Typeface.createFromAsset(mContext.getAssets(), "DroidSansFallbackanmol256.ttf"); setTypeface(Font_name); } 

}

Use attrs.xml

 <declare-styleable name="TextView"> <attr name="font_family" format="string"/> <attr name="isCorner" format="boolean"/> </declare-styleable> 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.