0

我想创建一个与Play Store相同的弹出菜单弹出菜单应在网格视图项的右下角打开。但是,如果该项目位于屏幕底部,则弹出窗口应在单击它的位置上方打开。

我试过弹出菜单,但它在项目下方或顶部打开。

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

        System.out.println("position is : " + position);
        final MenuItems menuItems = (MenuItems)parent.getItemAtPosition(position);
        final String default_topping_link = menuItems.getLink();
        try{
            topping = DefaultToppingParser.parse(new FileInputStream(default_topping_link));
            for(int i=0;i<topping.size();i++){
                System.out.println("topping id  : " + topping.get(i));
            }
        }catch(Exception e){
            e.printStackTrace();
        }

        if(position == (burger_item_AL.size()-1)){
            Intent intent = new Intent(MainActivity.this,CustomiseItem.class);
            intent.putExtra("default_toppings_id", base_id);
            System.out.println("intent");
            startActivity(intent);
        } else {
            PopupMenu popupMenu = new PopupMenu(MainActivity.this, view);
            popupMenu.getMenuInflater().inflate(R.menu.popup_menu, popupMenu.getMenu());
            popupMenu.show();

            popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {

                    ....some coding

                    return true;
                }
            });
        }
    }
});

我在 Google 上浏览了许多弹出菜单,但找不到与 Play 商店相同的菜单。任何人都可以提出一些解决方案吗?

弹出窗口:

在适配器类中:

@Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_DOWN){
                    MainActivity.p = new Point();
                    MainActivity.p.x = (int) event.getRawX();
                    MainActivity.p.y = (int) event.getRawY();
                    if (MainActivity.p != null){
                            MainActivity.position = position;
                            MainActivity.showPopup(context, MainActivity.p);
                        }
                    return true;
                }
                return false;
            }
        });

显示弹出方法:

 public static void showPopup(final Context context, Point p) {
           int popupWidth = 150;
           int popupHeight = 150;

           // Inflate the popup_layout.xml
           LinearLayout viewGroup = (LinearLayout) ((Activity) context).findViewById(R.id.popup);
           LayoutInflater layoutInflater = (LayoutInflater) context
             .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           View layout = layoutInflater.inflate(R.layout.popup, viewGroup);

           // Creating the PopupWindow
           final PopupWindow popup = new PopupWindow(context);
           popup.setContentView(layout);
           popup.setWidth(popupWidth);
           popup.setHeight(popupHeight);
           popup.setFocusable(true);

           // Some offset to align the popup a bit to the right, and a bit down, relative to button's position.
           int OFFSET_X = 30;
           int OFFSET_Y = 30;

           // Clear the default translucent background
           popup.setBackgroundDrawable(new BitmapDrawable());

           // Displaying the popup at the specified location, + offsets.
           System.out.println("showing popup");
           popup.showAtLocation(layout, Gravity.NO_GRAVITY, p.x - OFFSET_X, p.y + OFFSET_Y);
           }
4

2 回答 2

0

您应该使用 PopupWindow 来模仿您感兴趣的行为。

在此链接之后,您可以找到一个有趣的教程,教您如何实现这一目标。 http://mrbool.com/how-to-implement-popup-window-in-android/28285

希望能帮助到你。

于 2014-07-30T09:49:04.613 回答
0

主要的.xml

<?xml version="1.0" encoding="utf-8"?>

<item
    android:id="@+id/spam"
    android:title="Spam"/>
<item
    android:id="@+id/blockuser"
    android:title="Block User"/>
<item
    android:id="@+id/remove"
    android:title="Remove"/>

弹出菜单代码

PopupMenu popup = new PopupMenu(activity, v);

            /** Adding menu items to the popumenu */
            popup.getMenuInflater().inflate(R.menu.main, popup.getMenu());
            popup.setOnMenuItemClickListener(new OnMenuItemClickListener() {

                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    // TODO Auto-generated method stub
                    switch (item.getItemId()) {
                    case R.id.spam:

                        Toast.makeText(activity, "Spam clicked",
                                Toast.LENGTH_SHORT).show();
                        break;

                    case R.id.blockuser:
                        Toast.makeText(activity, " Block user clicked",
                                Toast.LENGTH_SHORT).show();
                        break;

                    case R.id.remove:
                        Toast.makeText(activity, "Remove clicked",
                                Toast.LENGTH_SHORT).show();

                        // RecentFragment rf = new RecentFragment();
                        // rf.onItemClick(position);
                        break;

                    default:
                        break;
                    }

                    return false;
                }
            });
            popup.show();

这段代码非常适合我,我的要求和你在描述中提到的一样希望它会对你有所帮助

于 2014-07-30T09:49:19.297 回答