Android:自定义应用程序的菜单(例如背景颜色)

什么方式(如果有办法)自定义菜单(由手机的菜单button触发的)。 我特别感兴趣的两件事情:

  • 将背景颜色从标准浅灰色改为深灰色
  • 菜单项是如何alignment的。 我有4个项目,他们自动alignment2×2,但我宁愿他们都在一行(1×4)

不与内置的菜单框架。

欢迎您拦截MENUbutton(通过onKeyDown()或其他),并呈现你想要的,但要记住,用户将期待它看起来像其他设备上的菜单。

我创build了我自己的菜单类。 这可能不是你想要的,但它应该让你开始。 这里是我发表的文章和可下载的源代码链接。

http://www.codeproject.com/KB/android/AndroidMenusMyWay.aspx

你也可以实现通常用来显示标准菜单的“onCreateOptionsMenu”方法,并在这种情况下显示任何你想要的。

在我的游戏中,我实现了它,当按下菜单button时显示“游戏暂停”对话框…

使用样式。 这适用于我在Android 5.0上

 <style name="AppTheme" parent="android:Theme.Material.Light"> <item name="android:colorPrimary">@color/primary</item> <item name="android:actionOverflowMenuStyle">@style/PopupMenu.MyStyle</item> </style> <style name="PopupMenu.MyStyle" parent="android:Widget.PopupMenu"> <item name="android:popupBackground">@drawable/actionbar_item_background</item> </style> 

…然后drawable是一个常规select器

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/primary"/> <item android:drawable="@color/highlighted" android:state_pressed="true"/> </selector> 

主题中的style.xml中的背景菜单颜色

 <item name="android:panelFullBackground">@android:color/darker_gray</item> 

这个答案的作品,但使用ActionBarSherlock崩溃。 这是一个hacky的解决方法,使这项工作毫无意义。

  // Black Vodoo! Do not try this at home. final LayoutInflater li = getLayoutInflater(); final Class<LayoutInflater> clazz = LayoutInflater.class; try { final Field fieldSet = clazz.getDeclaredField("mFactorySet"); fieldSet.setAccessible(true); fieldSet.setBoolean(li, false); li.setFactory(new Factory() { @Override public View onCreateView(final String name, final Context context, final AttributeSet attrs) { if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) { try { final LayoutInflater f = getLayoutInflater(); final View view = f.createView(name, null, attrs); new Handler().post(new Runnable() { @Override public void run() { // Set the text color ((TextView) view).setTextColor(Color.WHITE); } }); return view; } catch (final Exception e) { } } return null; } }); } catch (final Exception e) { e.printStackTrace(); }