咱們知道,在Android中修改TextView的字體顏色,通常是經過setTextColor()方法。雖然說Android的Menu菜單項的每一項都是由TextView組成,可是Android的sdk並無給出具體設置Menu的顏色的api。通常咱們只能經過修改Theme來間接修改Menu的樣式,但若是須要對單獨的某一個Menu修改顏色,這種方法又不行了。android
stackoverflow上提出了另一種方法,即LayoutInflater.Factory,當你經過LayoutInflater去建立一個view或menu時,你就能夠經過實現本身的LayoutInflater.Factory來定製本身的View。相關代碼以下:api
getLayoutInflater().setFactory(new android.view.LayoutInflater.Factory(){ @Override public View onCreateView(String name, Context context, AttributeSet attrs) { if (name.equalsIgnoreCase("com.android.internal.view.menu.ActionMenuItemView")) { try{ LayoutInflater f = LayoutInflater.from(context); final View view = f.createView(name, null, attrs); if(view instanceof TextView) { TextView menuTv = ((TextView)view); //這裏你就能夠修改TextView的字體顏色,大小,背景等等. menuTv.setTextColor(getResources().getColor(R.color.action_bar_button_text_color)); } return view; }catch (InflateException e) { e.printStackTrace(); }catch (ClassNotFoundException e) { e.printStackTrace(); } } return null; } });
其實,還有另一種方法。咱們知道修改Menu的標題是經過 ide
public MenuItem setTitle(CharSequence title);
這裏,介紹一個類SpannableString給你們,若是你作個聊天的表情相關的應用,那麼你必定對這個類很熟悉,首先字體
咱們來看下這個類的聲明:ui
public class SpannableString extends SpannableStringInternal implements CharSequence, GetChars, Spannable
能夠清楚的看到SpannableString是實現了CharSequence接口的,因此咱們能夠經過構建一個SpannableString來spa
間接的修改Menu的字體和顏色。這裏咱們使用了SpannableStringBuilder,相關代碼以下:code
/* * Add color to a given text */ private SpannableStringBuilder addColor(CharSequence text, int color) { SpannableStringBuilder builder = new SpannableStringBuilder(text); if (color != 0) { builder.setSpan(new ForegroundColorSpan(color), 0, text.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } return builder; }