zoukankan      html  css  js  c++  java
  • Android 修改Menu字体颜色和背景

        我们知道,在Android中修改TextView的字体颜色,一般是通过setTextColor()方法。虽说Android的Menu菜单项的每一项都是由TextView组成,但是Android的sdk并没有给出具体设置Menu的颜色的api。一般我们只能通过修改Theme来间接修改Menu的样式,但如果需要对单独的某一个Menu修改颜色,这种方法又不行了。

        stackoverflow上提出了另外一种方法,即LayoutInflater.Factory,当你通过LayoutInflater去创建一个view或menu时,你就可以通过实现自己的LayoutInflater.Factory来定制自己的View。相关代码如下:

    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的标题是通过       

     public MenuItem setTitle(CharSequence title);

         这里,介绍一个类SpannableString给大家,如果你做个聊天的表情相关的应用,那么你一定对这个类很熟悉,首先

    我们来看下这个类的声明:

    public class SpannableString extends SpannableStringInternal implements CharSequence, GetChars, Spannable

         可以清楚的看到SpannableString是实现了CharSequence接口的,所以我们可以通过构建一个SpannableString来

    间接的修改Menu的字体和颜色。这里我们使用了SpannableStringBuilder,相关代码如下:

    
    
    
    
            /*
             * 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;
            }
    
    
    
     
  • 相关阅读:
    阿里云ECS 网站访问变卡
    MySql导入导出sql脚本(转)
    Mysql数据库备份的问题:mysqldump: Got error: 1049: Unknown database 'blog;' when selecting the database(转)
    Mysql in 优化(转)
    根据查询更新JTable显示(转)
    MyEclipse部署项目到Tomcat上,但是classes文件夹下没有编译项目(转)
    POI Workbook workbook = WorkbookFactory.create(fis); 报NoSuchMethodError
    07-常用内置对象
    06-流程控制
    05-数据类型转换
  • 原文地址:https://www.cnblogs.com/xiaoyang2009/p/5212474.html
Copyright © 2011-2022 走看看