我现在已经在这方面工作了一段时间。我正在尝试创建一个PopupMenu,其最顶层项目看起来与其他所有项目不同 - 本质上是包含标题的标题项目。
我已尝试为该项设置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 :(得分:0)
使用actionBar的相同上下文来创建PopupMenu
actionBar.getThemedContext()
所以,
ActionBar actionBar = ((ActionBarActivity) getActivity()).getSupportActionBar();
PopupMenu popMenu = new PopupMenu(actionBar.getThemedContext(), anyView);