【问题标题】:Appropriate alternative to PopupMenu for pre-Honeycomb用于 pre-Honeycomb 的 PopupMenu 的适当替代方案
【发布时间】:2012-03-26 20:01:32
【问题描述】:

我已经实现了PopupMenu 用于在按下 ActionBar 上的项目后显示的菜单。我想知道 11 之前的 SDK 版本有哪些替代方案?

可能使用类似于上下文菜单的东西。你有什么想法?

不过,我目前的实现是使用菜单项加载一个新的 Activity。

【问题讨论】:

标签: android


【解决方案1】:

正如@sastraxi 建议的那样,一个好的解决方案是使用AlertDialogCHOICE_MODE_SINGLE

AlertDialog.Builder builder = new AlertDialog.Builder(MyAndroidAppActivity.this);
builder.setTitle("Pick color");
builder.setItems(R.array.colors, new DialogInterface.OnClickListener() {
           public void onClick(DialogInterface dialog, int which) {
           // The 'which' argument contains the index position
           // of the selected item
       }
});
builder.setInverseBackgroundForced(true);
builder.create();
builder.show();

还有 strings.xml 文件。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="colors">
        <item >blue</item>
        <item >white</item>
    </string-array>
</resources>

参考:Adding a List

【讨论】:

    【解决方案2】:

    或者,您可以使用floating context menu


    (3年后,实际上读取浮动上下文菜单仅适用于长按和匆忙编辑答案)。

    您需要为上下文菜单注册视图,打开菜单,然后取消注册(这样操作项上的长按不会再次触发它):

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.my_menu_item) {
            View view = item.getActionView();
            registerForContextMenu(view);
            openContextMenu(view);
            unregisterForContextMenu(view);
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
    

    当然,按照链接的文档实现onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)

    正如 OP 所写,如果您想要一个居中的对话框,更好的选择是在这种特殊情况下使用 AlertDialog,或者如果您希望将菜单锚定到操作项,则使用 PopupMenu。不过弹出菜单可能有点奇怪,因为它感觉就像一个溢出菜单。

    【讨论】:

    • OP,我认为您的回答更适合您的用例,因为浮动上下文菜单仅在长按时触发,而没有我在上面添加的 hack。
    • 很好。我重新接受了自己。感谢您维护您的答案:)
    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 2011-05-14
    相关资源
    最近更新 更多