更改android菜单的背景颜色[重复]
Posted
技术标签:
【中文标题】更改android菜单的背景颜色[重复]【英文标题】:Change background color of android menu [duplicate] 【发布时间】:2011-02-12 17:36:30 【问题描述】:我正在尝试将标准浅灰色更改为浅绿色。似乎没有一种简单的方法可以做到这一点(例如,通过 android 主题),但我找到了一种解决方法,如本页所述:http://tinyurl.com/342dgn3。
作者好像消失了,谁能帮我整合这段代码?我不明白我需要在哪里实现 LayoutInflater
工厂类。
【问题讨论】:
如果有人感兴趣,我已经解决了。 pastebin.com/1QHGTMUW只需调用onCreate中的setMenuBackground 这是我在 Android 4.0+ 上获得自定义操作栏菜单背景颜色的方法:***.com/a/20077381/56285 我试试你的代码,但它首先告诉我删除@Override,然后什么都没有发生。我试图改变菜单背景颜色。 为什么不能在 4.3 api 上工作? 【参考方案1】:当你膨胀菜单时调用这个 setMenuBackground() 方法
@Override
public boolean onCreateOptionsMenu(Menu menu)
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.menu,menu);
setMenuBackground();
return true;
并将其写入 setMenuBackground() 方法
protected void setMenuBackground()
// Log.d(TAG, "Enterting setMenuBackGround");
getLayoutInflater().setFactory( new Factory()
public View onCreateView(String name, Context context, AttributeSet attrs)
if ( name.equalsIgnoreCase( "com.android.internal.view.menu.IconMenuItemView" ) )
try // Ask our inflater to create the view
LayoutInflater f = getLayoutInflater();
final View view = f.createView( name, null, attrs );
/* The background gets refreshed each time a new item is added the options menu.
* So each time Android applies the default background we need to set our own
* background. This is done using a thread giving the background change as runnable
* object */
new Handler().post( new Runnable()
public void run ()
// sets the background color
view.setBackgroundResource( R.color.androidcolor);
// sets the text color
((TextView) view).setTextColor(Color.BLACK);
// sets the text size
((TextView) view).setTextSize(18);
);
return view;
catch ( InflateException e )
catch ( ClassNotFoundException e )
return null;
);
【讨论】:
有人让它工作吗?好像没有效果(姜饼) 它适用于 android 2.2 尚未检查 2.3 似乎对我不起作用(在 Android 4.0+ 上)。com.android.internal.view.menu.IconMenuItemView
不匹配任何内容,当我将其更改为 com.android.internal.view.menu.ListMenuItemView
时,我的应用程序在打开菜单时崩溃。使用TextView
,我可以更改菜单项的背景颜色的一部分,但不是全部。在任何情况下,这似乎都很老套,而且很容易与未来的 Android 版本发生冲突。
我得到的唯一信息是“java.lang.illegalstateexception:已经在这个 layoutinflater 上设置了工厂”,适用于 android 2.3+ 和 4.0+ 设备。
@AbhayKumar 你能描述一下“进口”吗?我收到java.lang.illegalstateexception: a factory has already been set on this layoutinflater
错误。请帮帮我。【参考方案2】:
这显然是许多程序员都面临的问题,Google 尚未提供令人满意的支持解决方案。
Abhay Kumar 和 Nik Reiman 发布的 setMenuBackground() hack 是一个好的开始,但它要么崩溃,要么在 Android 2.3 上无法运行。
请在这个 *** 问题中查看我的回答 (Louis Semprini),以获得更好的评论和更精致的 hack,适用于 2.1、2.2 和 2.3(这应该不会对 3.X 造成伤害,尽管我们永远无法保证这一点):
How to change the background color of the options menu?
此外,这里还有许多其他资源,您可能会发现对这个问题有帮助:
Change background color of android menu
Android: customize application's menu (e.g background color)
http://www.macadamian.com/blog/post/android_-_theming_the_unthemable/
Android MenuItem Toggle Button
Is it possible to make the Android options menu background non-translucent?
http://www.codeproject.com/KB/android/AndroidMenusMyWay.aspx
Setting the menu background to be opaque
【讨论】:
【参考方案3】:在 onCreate 中使用 setMenuBackground。
【讨论】:
哎呀,我看到你已经回答了你自己的问题。干得好。 在哪里??其中 OnCreate以上是关于更改android菜单的背景颜色[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android 4.2 中更改操作栏选项菜单的背景颜色?