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(); }