android - Add custom font to all LinearLayout textviews -
i add linear layout , multiple textviews programmatically , set custom font texts,
i did in bellow way , works .
mainactivity 1:
public class mainactivity extends activity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); linearlayout ll = (linearlayout)findviewbyid(r.id.linearlayout); textview tv = new textview(this); tv.setgravity(gravity.right); tv.settextcolor(color.green); tv.settextsize(40); ll.addview(tv); typeface face4=typeface.createfromasset(getassets(),"bfantezy.ttf"); tv.settypeface(face4); tv.settext(html.fromhtml(getstring(r.string.trip))); imageview divider = new imageview(this); linearlayout.layoutparams lp = new linearlayout.layoutparams(layoutparams.match_parent, 5); lp.setmargins(10, 10, 10, 10); divider.setlayoutparams(lp); divider.setbackgroundcolor(color.blue); ll.addview(divider); textview tv1 = new textview(this); tv1.setgravity(gravity.right); tv1.settextsize(40); ll.addview(tv1); typeface face1=typeface.createfromasset(getassets(),"bfantezy.ttf"); tv1.settypeface(face1); tv1.settext(html.fromhtml(getstring(r.string.trip1))); imageview divider1 = new imageview(this); linearlayout.layoutparams lp1 = new linearlayout.layoutparams(layoutparams.match_parent, 5); lp1.setmargins(10, 10, 10, 10); divider1.setlayoutparams(lp1); divider1.setbackgroundcolor(color.blue); ll.addview(divider1); textview tv2 = new textview(this); tv2.setgravity(gravity.right); tv2.settextsize(40); ll.addview(tv2); typeface face2=typeface.createfromasset(getassets(),"bfantezy.ttf"); tv2.settypeface(face2); tv2.settext(html.fromhtml(getstring(r.string.trip2))); imageview divider3 = new imageview(this); linearlayout.layoutparams lp3 = new linearlayout.layoutparams(layoutparams.match_parent, 5); lp3.setmargins(10, 10, 10, 10); divider3.setlayoutparams(lp3); divider3.setbackgroundcolor(color.blue); ll.addview(divider3); } } but recall
typeface.createfromasset(getassets() with each text ,its heavy way apply custom font , try make custom view bellow doesn't set custom font texts:
mainactivity:
public class mainactivity extends activity { @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.main); linearlayout ll = (linearlayout)findviewbyid(r.id.linearlayout); // add text view textview tv = new textview(this); tv.setgravity(gravity.right); tv.settextcolor(color.green); tv.settextsize(40); ll.addview(tv); tv.settext(html.fromhtml(getstring(r.string.trip))); imageview divider = new imageview(this); linearlayout.layoutparams lp = new linearlayout.layoutparams(layoutparams.match_parent, 5); lp.setmargins(10, 10, 10, 10); divider.setlayoutparams(lp); divider.setbackgroundcolor(color.blue); ll.addview(divider); textview tv1 = new textview(this); tv1.setgravity(gravity.right); tv1.settextsize(40); ll.addview(tv1); tv1.settext(html.fromhtml(getstring(r.string.trip1))); imageview divider1 = new imageview(this); linearlayout.layoutparams lp1 = new linearlayout.layoutparams(layoutparams.match_parent, 5); lp1.setmargins(10, 10, 10, 10); divider1.setlayoutparams(lp1); divider1.setbackgroundcolor(color.blue); ll.addview(divider1); textview tv2 = new textview(this); tv2.setgravity(gravity.right); tv2.settextsize(40); ll.addview(tv2); tv2.settext(html.fromhtml(getstring(r.string.trip2))); imageview divider3 = new imageview(this); linearlayout.layoutparams lp3 = new linearlayout.layoutparams(layoutparams.match_parent, 5); lp3.setmargins(10, 10, 10, 10); divider3.setlayoutparams(lp3); divider3.setbackgroundcolor(color.blue); ll.addview(divider3); }} customtextview:
public class customtextview extends textview { public customtextview(context context, attributeset attrs, int defstyle) { super(context, attrs, defstyle); init(); } public customtextview(context context, attributeset attrs) { //call constructor has complete definition this(context, attrs, 0); init(); } public customtextview(context context) { super(context); init(); } private void init() { typeface tf = typeface.createfromasset(getcontext().getassets(), "bfantezy.ttf"); settypeface(tf); } } any appreciated , thanks.
instead of creating font assets every time, create "fontfactory" , reuse same one.
public class fontfactory { private static typeface t1; public static typeface getbfantezy(context c) { if (t1 == null) { t1 = typeface.createfromasset(c.getassets(), "bfantezy.ttf"); } return t1; } private static typeface t2; public static typeface getotherfont(context c) { if (t2 == null) { t2 = typeface.createfromasset(c.getassets(), "otherfont.ttf"); } return t2; } } then use in code :
tv1.settypeface(fontfactory.getbfantezy(getcontext()); you no longer have worry creating typeface. if needs it, factory create it. can add similar methods handle other typefaces wish use.
Comments
Post a Comment