How to make a custom TextView?
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.widget.TextView;
public class FontTextView extends TextView {
public FontTextView(Context context) {
super(context);
Typeface face=Typeface.createFromAsset(context.getAssets(), "Helvetica_Neue.ttf");
this.setTypeface(face);
}
public FontTextView(Context context, AttributeSet attrs) {
super(context, attrs);
Typeface face=Typeface.createFromAsset(context.getAssets(), "Helvetica_Neue.ttf");
this.setTypeface(face);
}
public FontTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
Typeface face=Typeface.createFromAsset(context.getAssets(), "Helvetica_Neue.ttf");
this.setTypeface(face);
}
protected void onDraw (Canvas canvas) {
super.onDraw(canvas);
}
}
and in xml:
<com.util.FontTextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/accountInfoText"
android:textColor="#727272"
android:textSize="18dp" />
Create a Custom View for Textview
.
-
Make the entry in the
....attrs.xml
file and give an option to select Font as a list in customTextView
. -
Create the enum entry with a list of fonts and assign unique values
-
Make entries of all fonts in
strings.xml
Roboto-Bold Roboto-Medium Roboto-Light Roboto-Regular Roboto-Thin Roboto-Italic
-
Create an asset folder and copy all the necessary font you want to put in the font folder
-
Create a class extending
TextView
import android.content.Context; import android.content.res.TypedArray; import android.graphics.Typeface; import android.util.AttributeSet; import android.widget.TextView; /** * Created by ANKIT */ public class CustomFontTextView extends TextView { String customFont; public CustomFontTextView(Context context, AttributeSet attrs) { super(context, attrs); style(context, attrs); } public CustomFontTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); style(context, attrs); } private void style(Context context, AttributeSet attrs) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomFontTextView); int cf = a.getInteger(R.styleable.CustomFontTextView_fontName, 0); int fontName = 0; switch (cf) { case 1: fontName = R.string.Roboto_Bold; break; case 2: fontName = R.string.Roboto_Italic; break; case 3: fontName = R.string.Roboto_Light; break; case 4: fontName = R.string.Roboto_Medium; break; case 5: fontName = R.string.Roboto_Regular; break; case 6: fontName = R.string.Roboto_Thin; break; default: fontName = R.string.Roboto_Regular; break; } customFont = getResources().getString(fontName); Typeface tf = Typeface.createFromAsset(context.getAssets(), "font/" + customFont + ".ttf"); setTypeface(tf); a.recycle(); } }
You can use this custom class this way. .. use your packageName.ClassName
<ankit.com.customui.CustomFontTextView
android:layout_width="match_parent"
android:text="Hello World Ankit"
android:textSize="16sp"
app:fontName="Roboto_Medium"
android:layout_height="wrap_content"/>
add below styleable in res/values/attrs.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="CustomFontTextView">
<attr name="fontName" format="string" />
</declare-styleable>
</resources>