为什么我的下拉菜单没有出现在 cardview 的圆点下面?

Why my dropdown menu is not coming under the dots on cardview?

Dropdown menu is not popped under the dots button on cardview

下面是我为此写的 classes

我创建了自定义菜单并将该菜单应用到 cardview 工具栏上(即垂直 3 个点)我不知道问题出在哪里下拉菜单的对齐方式已更改,我现在无法修复它

产品适配器 class 如下,具有所有功能:

public class ProdAdapter extends BaseAdapter {

    private PopupMenu mPopupMenu;

    Context context;
    ArrayList<Model> models;

    public ProdAdapter(Context context, ArrayList<Model> models) {
        this.context = context;
        this.models = models;
    }

    @Override
    public int getCount() {
        return models.size();
    }

    @Override
    public Object getItem(int i) {
        return models.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        if(view == null){
            view = View.inflate(context, R.layout.list_items,null);
        }

        ImageView images = (ImageView) view.findViewById(R.id.prodpic);
        TextView prodname = (TextView) view.findViewById(R.id.prodname);
        TextView prodbrand = (TextView) view.findViewById(R.id.prodbrand);
        TextView prodprice = (TextView) view.findViewById(R.id.prodprice);
        TextView prodstatus = (TextView) view.findViewById(R.id.status);
        Toolbar prodmenu = (Toolbar) view.findViewById(R.id.prodmenu);

        mPopupMenu = new PopupMenu(context, prodmenu);
        MenuInflater menuInflater = mPopupMenu.getMenuInflater();
        menuInflater.inflate(R.menu.product_menu, mPopupMenu.getMenu());
        //mPopupMenu.inflate(R.menu.product_menu);
        prodmenu.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mPopupMenu.show();
            }
        });

        mPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem menuItem) {
                int id = menuItem.getItemId();
                if (id == R.id.action_edit) {
                    //Intent intent = new Intent(MainActivity.this,SettingsActivity.class);
                    //startActivity(intent);
                    return true;
                }
                if (id == R.id.action_delete) {
                    //Intent intent = new Intent(MainActivity.this,SettingsActivity.class);
                    //startActivity(intent);
                    return true;
                }
                return true;
            }
        });

        Model model = models.get(i);

        images.setImageResource(model.getProd_img());
        prodname.setText(model.getProd_name());
        prodbrand.setText(model.getProd_brand());
        prodprice.setText(model.getProd_price());
        prodstatus.setText(model.getProd_status());

        return view;
    }
}

下面的菜单文件 prod_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_edit"
        android:orderInCategory="100"
        android:title="Edit"
        app:showAsAction="never" />
    <item
        android:id="@+id/action_delete"
        android:orderInCategory="100"
        android:title="Delete"
        app:showAsAction="never" />
</menu>

下面的卡片视图布局 list_items.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    card_view:cardUseCompatPadding="true"
    android:layout_marginBottom="16dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:paddingBottom="4dp">

        <ImageView
            android:id="@+id/prodpic"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="10dp"
            android:layout_marginStart="10dp"
            android:layout_marginTop="5dp"
            card_view:srcCompat="@mipmap/dd_logo" />

        <android.support.v7.widget.Toolbar
            android:id="@+id/prodmenu"
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:layout_alignTop="@+id/prodname"
            android:layout_marginRight="10dp"
            android:background="@drawable/dots" />

        <TextView
            android:id="@+id/prodname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="10dp"
            android:layout_marginTop="10dp"
            android:layout_toEndOf="@+id/prodpic"
            android:layout_toLeftOf="@+id/prodmenu"
            android:layout_toRightOf="@+id/prodpic"
            android:layout_toStartOf="@+id/prodmenu"
            android:fontFamily="sans-serif-condensed"
            android:text="Product Name"
            android:textColor="#000"
            android:textStyle="bold"
            android:typeface="normal" />

        <TextView
            android:id="@+id/prodbrand"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/prodname"
            android:layout_alignStart="@+id/prodname"
            android:layout_below="@+id/prodname"
            android:layout_marginTop="10dp"
            android:layout_toLeftOf="@+id/prodmenu"
            android:layout_toStartOf="@+id/prodmenu"
            android:fontFamily="sans-serif-condensed"
            android:text="Product Brand"
            android:textColor="#000"
            android:typeface="normal" />

        <TextView
            android:id="@+id/prodprice"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBaseline="@+id/textView4"
            android:layout_alignBottom="@+id/textView4"
            android:layout_toEndOf="@+id/textView4"
            android:layout_toRightOf="@+id/textView4"
            android:fontFamily="sans-serif-condensed"
            android:paddingLeft="5dp"
            android:text="Product Price"
            android:textColor="@color/colorAccent"
            android:typeface="normal" />

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@+id/prodbrand"
            android:layout_alignStart="@+id/prodbrand"
            android:layout_below="@+id/prodbrand"
            android:layout_marginTop="10dp"
            android:fontFamily="sans-serif-condensed"
            android:text="PKR"
            android:textColor="@color/colorAccent"
            android:typeface="normal" />

        <TextView
            android:id="@+id/status"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignEnd="@+id/prodmenu"
            android:layout_alignParentBottom="true"
            android:layout_alignRight="@+id/prodmenu"
            android:fontFamily="sans-serif-condensed"
            android:text="Status"
            android:textColor="@color/cardview_dark_background"
            android:typeface="normal" />
    </RelativeLayout>
</android.support.v7.widget.CardView>

当前代码正在将菜单附加到 listView 的视图组根。您的弹出菜单需要在列表项单击时调用,并将列表项视图作为锚点。

public void showMenu(View v) {
    PopupMenu popup = new PopupMenu(this, v);
    // This activity implements OnMenuItemClickListener
    popup.setOnMenuItemClickListener(this);
    popup.inflate(R.menu.actions);
    popup.show();
}

请参考Creating a Popup Menu