更改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 中更改操作栏选项菜单的背景颜色?

Android:按下菜单项时的背景颜色

如何更改选项菜单的背景颜色?

更改 navigationView 的单个特定菜单项的背景颜色

更改暴露下拉菜单的背景颜色

如何更改操作栏中下拉菜单的背景颜色