1

我正在尝试创建一个 PopupWindow,其工作方式类似于 Android 版 Chrome 中的操作栏菜单 - 例如: 如何创建自定义子菜单,如 Google Chrome 应用程序

这是我到目前为止所拥有的: 在此处输入图像描述

目前 - 我有 3 个问题:

  1. 我需要将菜单定位到右侧的操作栏按钮及其下方。像通常的菜单..

  2. 我需要在 PopupWindow 上有一个阴影(由于某种原因它被删除了,因为我知道 PopupWindow 自动在它周围有这个阴影)

  3. 在弹出窗口外部单击时,我需要它像操作栏的常用菜单一样关闭。

这是我的代码 - 单击操作栏按钮,这是运行的代码:

LayoutInflater inflater = (LayoutInflater) MainActivity.this
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final PopupWindow pw = new PopupWindow(inflater.inflate(
            R.layout.options_menu, null, false), LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, true);
    pw.showAtLocation(findViewById(R.id.main_cont), Gravity.NO_GRAVITY, 50, this.getSupportActionBar().getHeight() + 1);


    ListView moreOptions = (ListView)pw.getContentView().findViewById(R.id.moreOptions);
    String[] options = new String[] { "Settings", "Feedback", "Contribute", "DashClock Integration", "Tutorial", "ViewPager Demo", "Expandable List Demo", "Change Language", "Add 5 to list", "Add 20 to list" };

    final ArrayList<String> moreOptionsList = new ArrayList<String>();
    for (int i = 0; i < options.length; ++i) {
        moreOptionsList.add(options[i]);
    }

    ArrayAdapter<String> moreOptionsAdapter=new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1,
            moreOptionsList);
    moreOptions.setAdapter(moreOptionsAdapter);


    //pw.setBackgroundDrawable(this.getResources().getDrawable(R.drawable.listview_bg_inverted));
    /*
    pw.setTouchable(true);
    pw.setFocusable(false);
    */
    pw.setOutsideTouchable(true);

菜单设计:http: //pastebin.com/yi6S2HDt

提前感谢,丁。

4

1 回答 1

0

PopupWindow背景(您可以轻松更改它)但本身没有阴影。

您实际使用的showAtLocation()允许您指定窗口出现的确切位置。

要使其自动关闭,只需调用setOutsideTouchable(true);构造函数即可。

PopupMenu但是说了这么多,用 a代替a 不是更好PopupWindow吗?

于 2014-12-15T12:31:41.487 回答