首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PopupWindow还是PopupMenu?还是别的什么?

PopupWindow还是PopupMenu?还是别的什么?
EN

Stack Overflow用户
提问于 2014-07-23 14:29:00
回答 1查看 4.5K关注 0票数 1

我试图创建非常类似的布局,如谷歌播放图书。我需要创建一个PopupMenu或PopupWindow,它将显示在相同的位置,如下图所示。

我不确定是PopupMenu还是PopupWindow还是其他什么东西。当我单击菜单中的项目时,会显示此“窗口”。

如果我将一个方向更改为景观模式,在ActionBar中是一个新的图标,它显示了这个“窗口”。下图显示了这种情况:

我有两个问题:

  1. 这是PopupMenuPopupWindow还是别的什么?
  2. 我如何确定这个“窗口”的位置,以防它是PopupWindow,而我需要显示它?
EN

回答 1

Stack Overflow用户

发布于 2014-07-23 14:44:55

您必须创建这样一个OnClickListener

代码语言:javascript
复制
button.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {

        int[] location = new int[2];
        v.getLocationOnScreen(location);

        // Initialize the Point with x, and y positions
        Point point = new Point();
        point.x = location[0];
        point.y = location[1];

        popupWindow(v, point);

    }

});

popupWindow(View view, Point point)的实现方法

代码语言:javascript
复制
private ArrayAdapter<String> adapterTypeSelection;

private void popupWindow(View v, Point p) {
    // int popupwindowWidth =
    // UnitConverterClass.convertDpToPx(180,getActivity());
    int popupwindowHeight = LinearLayout.LayoutParams.WRAP_CONTENT;

    LayoutInflater layoutInflater = (LayoutInflater) getActivity()
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View layout = layoutInflater.inflate(
        R.layout.dashboard_profile_popup_window, null);

    // Creating the PopupWindow
    final PopupWindow pwindow = new PopupWindow(getActivity());
    pwindow.setContentView(layout);
    // pwindow.showAsDropDown(v);
    // pwindow.setWidth(popupwindowWidth);
    pwindow.setHeight(popupwindowHeight);
    pwindow.setFocusable(true);

    String[] types = {"hello", "hi"};

    adapterTypeSelection = new ArrayAdapter<String>(getActivity(),
        R.layout.<your layout for the popupwindow>,
        R.id.textView, types);

    ListView listview = (ListView) pwindow.getContentView().findViewById(
        R.id.listview_popwindow);

    listview.setAdapter(adapterTypeSelection);

    listview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

            TextView temp = (TextView) parent.getChildAt(position)
                .findViewById(R.id.textView);

            if (temp.getText()
                .toString()
                .equals("hello"))) {
                    //hello
            } else {
                //hi
            }

            pwindow.dismiss();
        }
    });

    pwindow.setOnDismissListener(new OnDismissListener() {

        @Override
        public void onDismiss() {
            //TODO dismiss settings
        }

    });

    pwindow.setWidth(<width>);
    pwindow.setBackgroundDrawable(<resource for background>);

    // int OFFSET_X = UnitConverterClass.convertDpToPx(180, getActivity());
    // int OFFSET_Y = UnitConverterClass.convertDpToPx(30, getActivity());
    // pwindow.showAtLocation(layout, Gravity.NO_GRAVITY, 
    //                                p.x + OFFSET_X, p.y + OFFSET_Y);
    pwindow.showAtLocation(layout, Gravity.NO_GRAVITY, p.x, p.y);
}

希望这有助于使PopupWindow在您想要显示的位置。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24913254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档