Android 修改Menu字体颜色和背景

    咱们知道,在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;
        }
相关文章
相关标签/搜索