CardView中的工具栏创建一个弹出菜单(溢出图标)

时间:2016-01-06 19:30:20

标签: android android-recyclerview material-design android-toolbar android-cardview

我在带有cardview的recyclerview中有一个看起来像google play的列表,并且效果很好。

我需要添加一个弹出菜单(带溢出图标),如下所示:

这是最好的方法吗?

我研究并发现有两种选择:

1 - 在cardview布局中有一个工具栏。这个解决方案是否存在性能问题?

2 - 带有带溢出图标的imagebutton或imageview, 单击菜单时创建。

我需要一个与> = API 10

兼容的解决方案

感谢

2 个答案:

答案 0 :(得分:20)

取决于你的布局。

如果您想要这样的布局,使用工具栏可以更轻松地实现它。 enter image description here

Somenthing like

<android.support.v7.widget.CardView>

   <LinearLayout>

        <Toolbar  android:id="@+id/card_toolbar" />

        //......

   </LinearLayout>

</CardView>

toolbar.inflateMenu(R.menu.card_toolbar);
toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener(){..});

如果您希望只使用弹出窗口更简单地使用图像。 Somenthing喜欢:

PopupMenu popup = new PopupMenu(getContext(), mImageButton);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(......);

答案 1 :(得分:0)

这是我的方法:

列表项:(res /布局)

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:maxLines="1"
            android:layout_toStartOf="@+id/item"
            android:layout_alignParentStart="true"/>

        <ImageButton
            android:layout_width="20dp"
            android:layout_height="30dp"
            android:id="@+id/options"
            android:src="@drawable/ic_menu"
            android:layout_alignParentEnd="true"
            android:onClick="showOptions"/>    

    </RelativeLayout>

</androidx.cardview.widget.CardView>

popup_menu:(res /菜单)

<?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/option1"
        android:title="Option1"/>

    <item
        android:id="@+id/option2"
        android:title="Option2"/>
</menu>

MainActivity:(将此功能添加到MainActivity中的任何位置)

public void showOptions(View view){
    PopupMenu popup = new PopupMenu(MainActivity.this, view);
    popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
        @Override
        public boolean onMenuItemClick(MenuItem item) {
            CardView view = 
           (CardView) ((ViewGroup) view.getParent()).getParent();
            int position = recyclerView.getChildAdapterPosition(cView);  
            Toast.makeText(getApplicationContext(), 
                        item.toString()+" clicked at position"+position,
                        Toast.LENGTH_SHORT).show();
            return true;
        }
    });
    popup.show();
}