2014-12-05 40 views
2

我一直在这个工作一段时间。我正在尝试创建一个PopupMenu,其中最上面的项目看起来不同于其他所有项目 - 实质上是包含标题的标题项目。Android - 添加自定义布局弹出菜单项

我已经尝试为该项目设置一个android:actionLayout,将该特定项目链接到应生成所需布局的xml文件。但是,这似乎完全没有影响。从那里我试图以编程方式设置actionView - 创建一个自定义视图,然后将其设置为该项目。仍然没有效果。

我在这里完成了研究,看起来至少有10个教程;也许我今天只是在谷歌搜索,但我找不到办法做到这一点。

这是我最后一次尝试:

// * my_menu.xml 
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <group 
     android:id="@+id/menu_title_group" > 
     <item 
      android:id="@+id/menu_title_item" 
      android:title="" 
      app:actionLayout="@layout/popup_menu_title_header_layout" /> 
    </group> 
</menu> 

然后......

// * popup_menu_title_header_layout.xml 
<?xml version="1.0" encoding="utf-8"?> 
<TextView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/popup_menu_title_header_text_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_marginStart="8dp" 
    android:layout_marginLeft="8dp" 
    android:layout_marginEnd="8dp" 
    android:layout_marginRight="8dp" 
    android:gravity="center" 
    android:background="@color/red" 
    android:textColor="@color/gray" 
    android:textSize="16sp"/> 

然后......

// * ShowPopupMenu.Activity 
    PopupMenu popup = new PopupMenu(getActivity(), showMenuButton); 
    popup.getMenuInflater().inflate(R.menu.my_menu, popup.getMenu()); 
    popup.getMenu().findItem(R.id.menu_title_item).setTitle(some_dynamic_string); 
    popup.getMenu().add(1,0,0,"some_dynamic_option_title_1"); 
    popup.getMenu().add(1,1,0,"some_dynamic_option_title_2"); 

...在弹出菜单中显示完全一样预计,但是顶部的物品完全不受actionLayout的影响。请注意,我尝试使用app:actionLayout,正如一些人所建议的那样。另外请注意,我不想为此使用上下文菜单。

在此先感谢!

+0

嗯......也许不工作,因为此PopupMenu不是在动作条 - 它锚定到一个标准按钮。 – Warblr 2014-12-06 20:56:28

+0

可能不得不使用ListPopupWindow - PopupMenu在自定义方面似乎不太灵活... – Warblr 2014-12-07 19:40:19

+0

使用popup而不是ContextMenu? – 2015-02-19 07:37:57

回答

0

使用动作条的同样情况下创建的弹出菜单

actionBar.getThemedContext() 

所以,

ActionBar actionBar = ((ActionBarActivity)  getActivity()).getSupportActionBar(); 
    PopupMenu popMenu = new PopupMenu(actionBar.getThemedContext(), anyView);