我们知道,在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;
}

 

Android 修改Menu字体颜色和背景的更多相关文章

  1. Android 修改 Menu字体颜色

    转载:http://blog.csdn.net/jayyuz/article/details/55260996 @Override public boolean onCreateOptionsMenu ...

  2. Android自定义Button字体颜色和背景颜色

    http://blog.csdn.net/breeze666/article/details/7747649

  3. 修改tabbar 字体颜色

    NSDictionary *seletedTextAttrs = @{NSForegroundColorAttributeName:[UIColor orangeColor]}; 修改tabbar 字 ...

  4. 如何修改CAD字体颜色?试试这种方法

    CAD中编辑图纸的时候,使用的CAD制图软件来进行绘制,图纸中的CAD字体颜色都是默认的颜色,这样不方便进行查看.这个时候就需要修改CAD字体颜色了,那么如何修改CAD字体颜色呢?具体要怎么来进行操作 ...

  5. delphi DBGrid简单自绘(字体颜色、背景等)

    delphi DBGrid简单自绘(字体颜色.背景等)  从网上找的代码 应该是C#写的,其实delphi 的操作类似: 1 2 3 4 5 6 7 8 9 10 11 12 13 void __fa ...

  6. 使用 JavaScript 中的 document 对象的属性,根据下拉框中选择的属性,更改页面中的字体颜色和背景颜色

    查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的 document 对象的属性,根据下拉框中选择的属性,更改页面中的字体颜色和背景颜色 实现思路: 在页面的 <body&g ...

  7. Android RadioGroup的RadioButton 选择改变字体颜色和背景颜色

    RadioGroup <RadioGroup android:id="@+id/client_charge_radiogroup" android:layout_width= ...

  8. RadioGroup 的 RadioButton 选择改变字体颜色和背景颜色

    RadioGroup <RadioGroup android:id="@+id/client_charge_radiogroup" android:layout_width= ...

  9. css 修改placeholder字体颜色字体大小 修改input记住账号密码后的默认背景色

     壹 ❀ 引 本来这个阶段的项目页面都是给实习生妹子做的,我只用写写功能接接数据,但这两天妹子要忙翻译,这个工作阶段也快结束了导致有点慌,只能自己把剩余的几个小页面给写了. 那么做页面的过程中,UI也 ...

随机推荐

  1. 【freeCodeCamp】免费晋级前台工程师呦!!!!

    首页地址:https://www.freecodecamp.org/ GitHub:https://github.com/freeCodeCamp/freeCodeCamp ============= ...

  2. java.sql.Timestamp类型

    如果想向数据库中插入日期时间的话,可以用java.sql.Timestamp类 一个与 java.util.Date类有关的瘦包装器 (thin wrapper),它允许 JDBC API 将该类标识 ...

  3. 终于会用c#中的delegate(委托)和event(事件)了 [转]

    原文 : http://www.cnblogs.com/zhangchenliang/archive/2012/09/19/2694430.html 一.开篇忏悔 对自己最拿手的编程语言C#,我想对你 ...

  4. 2017.2.15 开涛shiro教程-第二十一章-授予身份与切换身份(一) table、entity、service、dao

    原博客地址:http://jinnianshilongnian.iteye.com/blog/2018398 根据下载的pdf学习. 第二十一章 授予身份与切换身份(一) 1.使用场景 某个领导因为某 ...

  5. JAVA Eclipse开发Android程序如何自定义图标

    直接用做好的png图片替换res的所有分辨率的lc_launcher.png图片 注意到不同文件夹有不同的分辨率,直接把png图片做成最大的替换掉即可,不管小的. drawable-xxhdpi    ...

  6. 一款很实用的Memcache监控工具

    装了memcahce以后想对使用情况详细了解一下,如分配的内存够不够,都存了什么,经百度后发现这款工具灰常实用!此工具来自Memcache Pecl 中 http://pecl.php.net/pac ...

  7. GetDlgItem() 出现错误

    写MFC程序ASSERT(IsWindow(pTemp->m_hWnd))报错 CRect rect; CWnd *pWnd = GetDlgItem(IDC_picture);//IDC_pi ...

  8. apue学习笔记(第十章 信号)

    本章先对信号机制进行综述,并说明每种信号的一般用法. 信号概念 每个信号都有一个名字,这些名字都以3个字符SIG开头.在头文件<signal.h>中,信号名都被定义为正整形常量. 在某个信 ...

  9. java nio读取和写入文件

    读取 package com.test; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS ...

  10. php html_entity_decode使用总结

    在处理网页字符串的时候,尤其是做爬虫类的应用时,经常会涉及到要处理的字符串中包含html标签,现在对这类字符串的处理做一个小的总结: 有时候获取到的字符串中有html标签,在入库的时候出于安全的考虑通 ...