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

 

最新文章

  1. Ionic Lab下载地址
  2. MySql学习 (一) —— 基本数据库操作语句、三大列类型
  3. kylin1.5新特性 new aggregation group
  4. linux文件描述符数量的坑
  5. appstore 提交警告 - Missing iOS Distribution signing identity for xxxx
  6. 深入探究javascript的 {} 语句块
  7. 【BZOJ1011】【HNOI2008】遥远的行星
  8. JS时间
  9. java Timer类
  10. N皇后//搜索入门
  11. Tiny6410之控制icache驱动
  12. js、css3实现图片的放大效果
  13. 图像分割之(四)OpenCV的GrabCut函数使用和源码解读
  14. Spark 基本函数学习笔记一
  15. @JoinColumn解释
  16. Linux中python3,django,redis以及mariab的安装
  17. Python12(接口继承,子类调用父类,多态)
  18. kafka配置项host.name advertised.host.name
  19. Java反射和注解
  20. TagCanvas 插件

热门文章

  1. MFC中 CString类型用fprintf 函数写到文件中乱码的解决办法
  2. yii2操作数据库 mysql 读写分离 主从复制
  3. 一个端口划到多个VLAN
  4. Struts2 convention插件试用+ Spring+Hibernate SSH整合
  5. 【Web API系列教程】1.2 — Web API 2中的Action Results
  6. 如何查看在Heroku上部署了那些站点
  7. 重读金典------高质量C编程指南(林锐)-------第三章 命名规则
  8. 在SAE安装原版WORDPRESS(图文讲解)
  9. initramfs扫描磁盘前改变磁盘上电顺序
  10. Hive报错:Failed with exception Unable to rename