PopupMenu - 自定义菜单资源项中的文本(大小/颜色)

时间:2013-10-03 23:50:16

标签: android android-menu

我创建了一个PopLingMenu,它膨胀了一个LinearLayout的OnClick。我希望菜单项具有特定的textColortextSize;但是,菜单项似乎有一组非常有限的XML属性,我找不到引用样式的方法。有什么想法吗?

PopupMenu的:

customerMenu = (LinearLayout) view.findViewById(R.id.customerMenu);
customerMenu.setOnClickListener(new OnClickListener() {
       @Override
       public void onClick(View v) {
        // TODO Auto-generated method stub
        PopupMenu popup = new PopupMenu(getActivity(), customerMenu);
        popup.getMenuInflater().inflate(R.menu.addcustomermenu, popup.getMenu());
        popup.show();
       }
});

菜单资源:

RES /菜单/ addcustomermenu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/customerButtonOne"
        android:title="Create New Customer" >
    </item>
    <item
        android:id="@+id/customerButtonTwo"
        android:title="Search Existing Customer">
    </item>

</menu>

2 个答案:

答案 0 :(得分:2)

我会给你一个更详细的答案。

PopupMenu是这样创建的,

PopupMenu popupMenu = new PopupMenu(context, anchorView);

现在&#34;上下文&#34;这里在造型方面起着非常重要的作用。 PopupMenu的样式取决于您传递的上下文的样式。所以要非常小心。我浪费了差不多一半时间来搞清楚这一点。

如果你在一个片段中,只需传递&#34; getActivity()&#34;你完成了。

PopupMenu项目的样式

只需覆盖您的风格中的以下项目,

<item name="textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>
<item name="android:textAppearanceLargePopupMenu">@style/myPopupMenuTextAppearanceLarge</item>

<item name="textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>
<item name="android:textAppearanceSmallPopupMenu">@style/myPopupMenuTextAppearanceSmall</item>

并根据需要自定义文本外观,

<style name="myPopupMenuTextAppearanceSmall" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Small">
            <item name="android:textColor">@color/text_hint_color</item>
            <item name="android:textSize">@dimen/text_size</item>
</style>

<style name="myPopupMenuTextAppearanceLarge" parent="@style/TextAppearance.AppCompat.Light.Widget.PopupMenu.Large">
            <item name="android:textColor">@color/text_hint_color</item>
            <item name="android:textSize">@dimen/text_size</item>
</style>

如果要更改PopupMenu的背景,请执行此操作

<item name="popupMenuStyle">@style/myPopupMenuStyle</item>
    <item name="android:popupMenuStyle">@style/myPopupMenuStyle</item>

高级样式

PopupMenu项目默认不支持显示图标。但是显示图标可以让它看起来更好。我建议尝试一下。

要实现这一点,只需在您的活动中添加以下代码,就可以了,

  @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        if (featureId == Window.FEATURE_ACTION_BAR && menu != null) {
            if (menu.getClass().getSimpleName().equals("MenuBuilder")) {
                try {
                    Method m = menu.getClass().getDeclaredMethod(
                            "setOptionalIconsVisible", Boolean.TYPE);
                    m.setAccessible(true);
                    m.invoke(menu, true);
                } catch (NoSuchMethodException e) {
                    Log.e("tag", "onMenuOpened", e);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        }
        return super.onMenuOpened(featureId, menu);
    }

虽然样式选项非常有限,但您仍然可以自定义一些基本属性。

答案 1 :(得分:0)

据我所知..菜单项的文字不会改变..

所以..大多数APP使用菜单项的基本文本..

这只是我想......