Android Change Font Menu Items -


im trying change font of menu items custom font. in action bar dropdown menu couple of options. when pick 1 these options, title of item in actionbar changes optiontext , apply font. because applied te font in overrided 'onoptionitemselected(menuitem item)'. want font applied when menu gets created (it uses default font right now). attempted in 'oncreateoptionsmenu(menu menu)', keeps giving me error (null pointer exception). tried multiple overrided methods, nothing seems work. how can custom font applied menu item when it's been created? here code:

        @override         public boolean oncreateoptionsmenu(menu menu){             log.d("graphactivity", "oncreateoptionsmenu");             menuinflater inflater = getmenuinflater();             inflater.inflate(r.menu.menu_graph, menu);             optionmenu = menu;             boolean daymatch = user.getinstance().getdownloadedday() == user.getinstance().getcurrentday();             boolean monthmatch = user.getinstance().getdownloadedmonth() == user.getinstance().getcurrentmonth();              boolean yearmatch = user.getinstance().getdownloadedyear() == user.getinstance().getcurrentyear();             if(! daymatch || ! monthmatch || ! yearmatch){                 feedbackmanager feedbackmanager = new feedbackmanager();                 feedbackmanager.showtoast("file out of date", graphactivity.this, toast.length_short);                 optionmenu.finditem(r.id.action_refresh).seticon(r.drawable.ic_action_refreshed);             }             return true;         }          @override         public boolean onmenuopened(int featureid, menu menu){             typeface typeface = typeface.createfromasset(getassets(), "titilliumweb-regular.ttf");             menuitemview = (textview)findviewbyid(r.id.action_select);             menuitemview.settypeface(typeface);             return super.onmenuopened(featureid, menu);         }          @override         public boolean oncreatepanelmenu(int featureid, menu menu)         {             typeface typeface = typeface.createfromasset(getassets(), "titilliumweb-regular.ttf");             menuitemview = (textview)findviewbyid(r.id.action_select);             menuitemview.settypeface(typeface);             return super.oncreatepanelmenu(featureid, menu);         }          @override         public boolean onoptionsitemselected(menuitem item){             log.d("graphactivity", "onoptionsitemselected");             typeface typeface = typeface.createfromasset(getassets(), "titilliumweb-regular.ttf");             menuitemview = (textview)findviewbyid(r.id.action_select);             menuitemview.settypeface(typeface);             int id = item.getitemid();             if(id == r.id.action_settings){                 intent intent = new intent(graphactivity.this, settingsactivity.class);                 startactivity(intent);             }else if(id == r.id.action_refresh){                 if(itemclickable){                     taskmanager taskmanager = new taskmanager(graphactivity.this, progressbar);                     taskmanager.runtask("online");                 }             }else if(id == r.id.action_current){                 graphmanager.setselect(graphmanager.select_current);                 string title = optionmenu.finditem(r.id.action_current).gettitle().tostring();                 optionmenu.finditem(r.id.action_select).settitle(title);                 setselectable(week_button);                 setselectable(month_button);                 setclickable(year_button);                 graph();             }else if(id == r.id.action_previous){                 graphmanager.setselect(graphmanager.select_previous);                 string title = optionmenu.finditem(r.id.action_previous).gettitle().tostring();                 optionmenu.finditem(r.id.action_select).settitle(title);                 setselectable(week_button);                 setselectable(month_button);                 setclickable(year_button);                 graph();             }else if(id == r.id.action_compare){                 graphmanager.setselect(graphmanager.select_compare);                 graphmanager.setperiod(graphmanager.period_year);                 string title = optionmenu.finditem(r.id.action_compare).gettitle().tostring();                 optionmenu.finditem(r.id.action_select).settitle(title);                 setnonselectable(week_button);                 setnonselectable(month_button);                 sethighlight(year_button);                 setnotclickable(year_button);                 graph();             }             return super.onoptionsitemselected(item);         } 

you can customize option menu, including:

  1. add custom font

  2. change font size

  3. change font color

  4. set background drawable resource (e.g. image, border, gradient)

to change background border or gradient have create resource folder in res called drawable and, inside it, create border xml or gradient xml.

this can done programatically shown below:

public class custommenu extends activity {     /** called when activity first created. */     @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);     }      public boolean oncreateoptionsmenu(android.view.menu menu) {         menuinflater inflater = getmenuinflater();         inflater.inflate(r.menu.cool_menu, menu);         getlayoutinflater().setfactory(new factory() {             public view oncreateview(string name, context context,                     attributeset attrs) {                  if (name.equalsignorecase(                         "com.android.internal.view.menu.iconmenuitemview")) {                     try {                         layoutinflater li = layoutinflater.from(context);                         final view view = li.createview(name, null, attrs);                         new handler().post(new runnable() {                             public void run() {                                 // set background drawable if want                                 //or keep default -- either image, border                                 //gradient, drawable, etc.                                 view.setbackgroundresource(r.drawable.myimage);                                 ((textview) view).settextsize(20);                                   // set text color                                 typeface face = typeface.createfromasset(                                         getassets(),"oldeenglish.ttf");                                      ((textview) view).settypeface(face);                                 ((textview) view).settextcolor(color.red);                             }                         });                         return view;                     } catch (inflateexception e) {                         //handle inflation exception here                     } catch (classnotfoundexception e) {                         //handle classnotfoundexception here                     }                 }                 return null;             }         });         return super.oncreateoptionsmenu(menu);     }      @override     public boolean onoptionsitemselected(menuitem item) {         switch (item.getitemid()) {         case r.id.aboutus:             intent = new intent("com.test.demo.about");             startactivity(i);             break;         case r.id.preferences:             intent p = new intent("com.test.demo.prefs");             startactivity(p);             break;         case r.id.exit:             finish();             break;         }         return false;     } } 

dont forget create folder called menu in res folder, , inside menu folder create xml menu (e.g. cool_menu.xml) such this:

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android">     <item  android:title="about"android:id="@+id/aboutus" />      <item android:title="prefs" android:id="@+id/preferences" />      <item android:title="exit" android:id="@+id/exit" />  </menu> 

then output this:

enter image description here


Comments

Popular posts from this blog

android - MPAndroidChart - How to add Annotations or images to the chart -

javascript - Add class to another page attribute using URL id - Jquery -

firefox - Where is 'webgl.osmesalib' parameter? -