Android - 为弹出菜单项添加自定义布局

时间:2014-12-05 22:30:07

标签: java android popupmenu

我现在已经在这方面工作了一段时间。我正在尝试创建一个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,正如一些人所建议的那样。另请注意,我不想为此使用上下文菜单。

提前致谢!

1 个答案:

答案 0 :(得分:0)

使用actionBar的相同上下文来创建PopupMenu

actionBar.getThemedContext()

所以,

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