如何创建外观与ContextMenu完全相同的对话框?

3
有时,使用标准活动方法创建ContextMenu并不方便(因为在一个活动中会有很多不同的类别需要显示ContextMenu)。
但是,从任何地方创建对话框都很容易。 我该如何创建外观与ContextMenu完全相同的对话框?在哪里可以找到标准ContextMenu的布局或类似内容?
2个回答

6

我决定使用带有列表的AlertDialog(http://developer.android.com/guide/topics/ui/dialogs.html#AddingAList)而不是ContextMenu。它看起来像ContextMenu(也许不完全相同因为布局不同),但更加灵活,因为我可以在不同的监听器中处理不同的操作。


1
您可能会发现MenuBuilderContextMenuBuilderMenuDialogHelper很有用(请参见此处的代码)。特别是,MenuDialogHelper是最接近您想要实现的功能的东西。
请注意下一个菜单类型:
/**
 * The menu type that represents a menu dialog. Examples are context and sub
 * menus. This menu type will not have a corresponding MenuView, but it will
 * have an ItemView.
 */
public static final int TYPE_DIALOG = 2;

结合这些代码行:

// Order must be the same order as the TYPE_*
static final int ITEM_LAYOUT_RES_FOR_TYPE[] = new int[] {
    com.android.internal.R.layout.icon_menu_item_layout,
    com.android.internal.R.layout.list_menu_item_layout,
    com.android.internal.R.layout.list_menu_item_layout,
};

很明显,list_menu_item_layout 是你正在寻找的布局。可以在这里找到它。这个布局表示上下文菜单列表视图中的单个项目。

非常感谢您的回答!但这不是公共API(对吗?)我只能复制这个布局,希望它的系统副本以后不会被更改,对吗? - Andrei Buneyeu
也许最好不要使用上下文菜单,而是显示标准对话框。这将是更灵活的决策。 - Andrei Buneyeu
是的,你说的对。它们是私有的,如果任何一个安卓供应商定制上下文菜单的外观,那么你的应用程序将会看起来不同。但是,如果你只想使这些菜单在自己的应用程序活动中保持一致,那么是的 - 在所有情况下都使用你自己的自定义对话框而不是上下文菜单。 - inazaruk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接