繁体   English   中英

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

[英]Android - Add custom layout to popup menu item

我已经在这方面工作了一段时间。 我正在尝试创建一个 PopupMenu,其最顶部的项目看起来与所有其余项目不同 - 本质上是一个包含标题的标题项目。

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

我在这里对 SO 进行了研究,并查看了至少 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,正如某些人所建议的那样。 另请注意,我不想为此使用上下文菜单。

提前致谢!

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

actionBar.getThemedContext()

所以,

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM