我在带有cardview的recyclerview中有一个看起来像google play的列表,并且效果很好。
我需要添加一个弹出菜单(带溢出图标),如下所示:
这是最好的方法吗?
我研究并发现有两种选择:
1 - 在cardview布局中有一个工具栏。这个解决方案是否存在性能问题?
2 - 带有带溢出图标的imagebutton或imageview, 单击菜单时创建。
我需要一个与> = API 10
兼容的解决方案感谢
答案 0 :(得分:20)
取决于你的布局。
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();
}