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

Popular posts from this blog

Change php variable from jquery value using ajax (same page) -

Pull out data related to my apps from Android Play Store and iOS App Store -

How can I fetch data from a web server in an android application? -