我们知道,在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字体颜色
转载:http://blog.youkuaiyun.com/jayyuz/article/details/55260996 @Override public boolean onCreateOptionsMenu ...
Android自定义Button字体颜色和背景颜色
http://blog.youkuaiyun.com/breeze666/article/details/7747649
修改tabbar 字体颜色
NSDictionary *seletedTextAttrs = @{NSForegroundColorAttributeName:[UIColor orangeColor]}; 修改tabbar 字 ...
如何修改CAD字体颜色?试试这种方法
CAD中编辑图纸的时候,使用的CAD制图软件来进行绘制,图纸中的CAD字体颜色都是默认的颜色,这样不方便进行查看.这个时候就需要修改CAD字体颜色了,那么如何修改CAD字体颜色呢?具体要怎么来进行操作 ...
delphi DBGrid简单自绘(字体颜色、背景等)
delphi DBGrid简单自绘(字体颜色.背景等) 从网上找的代码 应该是C#写的,其实delphi 的操作类似: 1 2 3 4 5 6 7 8 9 10 11 12 13 void __fa ...
Android RadioGroup的RadioButton 选择改变字体颜色和背景颜色
RadioGroup
RadioGroup 的 RadioButton 选择改变字体颜色和背景颜色
RadioGroup
css 修改placeholder字体颜色字体大小 修改input记住账号密码后的默认背景色
壹 ❀ 引 本来这个阶段的项目页面都是给实习生妹子做的,我只用写写功能接接数据,但这两天妹子要忙翻译,这个工作阶段也快结束了导致有点慌,只能自己把剩余的几个小页面给写了. 那么做页面的过程中,UI也 ...
UIImagePickerController导航字体颜色和背景
创建UIImagePickerController // 创建图片选择器 UIImagePickerController *picker = [[UIImagePickerController all ...
随机推荐
PostgreSQL Replication之第十三章 使用PL/Proxy扩展(2)
13.2 设置 PL/Proxy 简短的理论介绍之后,我们可以继续前进并运行一些简单的PL/Proxy设置.要做到这一点,我们只需安装PL/Proxy并看看这是如何被使用的. 安装PL/Proxy是一 ...
SQL Server数据库(SQL Sever语言 函数以及SQL编程)
1.数学函数:操作一个数据,返回一个结果 --去上限: ceiling ☆select ceiling(price) from car --去下限:floor ☆select floor(price) ...
LeetCode Binary Tree Postorder Traversal(数据结构)
题意: 用迭代法输出一棵二叉树的后序遍历结果. 思路: (1)用两个栈,一个存指针,一个存标记,表示该指针当前已经访问过哪些孩子了. /** * Definition for a binary tre ...
Oracle中对表的操作
表的创建与管理 创建表: CREATE TABLE TABLE_NAME ( COLUMN_NAME TYPE [DEFAULT VALUE], COLUMN_NAME TYPE [DEFAULT V ...
SetDlgItemText控件运行错误
SetDlgltem函数把一个WM_SETTEXT消息发送到指定的控件. 今天在测试一个小程序,发现使用SetDlgItemText控件编译没问题,但是运行就出错误. 语句为: time=CTime: ...
Python第三天 序列 数据类型 数值 字符串 列表 元组 字典
Python第三天 序列 数据类型 数值 字符串 列表 元组 字典 数据类型数值字符串列表元组字典 序列序列:字符串.列表.元组序列的两个主要特点是索引操作符和切片操作符- 索引操作符让我 ...
java继承中的初始化顺序
初始化顺序:父类的静态变量-->父类的静态代码块-->子类的静态变量-->子类的静态代码快-->父类的非静态变量(父类的非静态代码块)-->父类的构造函数-->子类 ...
XV Open Cup named after E.V. Pankratiev. GP of America
A. Area of Effect 首先最优解中必有一个点在圆的边界上. 若半径就是$R$,则枚举一个点,然后把剩下的事件极角扫描即可,时间复杂度$O(m(n+m)\log(n+m))$. 否则圆必然 ...
Cartfile学习参考博客
1.http://www.cnblogs.com/xuruofan/p/6000864.html 2.http://www.jianshu.com/p/5ccde5f22a17
I/O模型(同步、非同步、阻塞、非阻塞)总结
I/O:同步(synchronous).异步(asynchronous).阻塞(blocking).非阻塞(nonblocking) 1.I/O内部机制 出于安全考虑,用户程序(用户态)是没办法直接操 ...