如何在Android中的卡片中添加溢出图标项

7

嗨,我正在使用支持库https://developer.android.com/reference/android/support/v7/widget/CardView.html尝试创建一个类似于此的布局,但我没有找到在卡片中添加溢出图标的方法。

我不想使用这个库https://github.com/gabrielemariotti/cardslib/blob/master/doc/CARDGRID.md。我想使用Google最近引入的支持库来实现同样的效果。

难道没有使用支持库实现的方法吗?还是我必须使用gabrielemariotti库来在卡片视图中添加溢出项。

enter image description here

更新

大家好,我已经编辑了问题,现在更清楚我想要什么了。


"我没有找到解决方法" -- 你尝试了什么?遇到了什么问题? - CommonsWare
@CommonsWare 我尝试在互联网上查找相关帖子,但没有找到任何使用支持库的方法。 - N Sharma
你在你的GridViewAdapter中,是否使用了CardView作为单元格内容的容器?如果没有,为什么在自己尝试之前就来这里问呢? - CommonsWare
@CommonsWare 不好意思,您没有理解我的问题。我的问题不是要使用网格视图来使用卡片视图。我想问的是如何制作这样的视图,例如在底部有箭头,用户点击它可以安装该应用程序。 - N Sharma
我的问题不是使用网格来创建卡片视图。你的问题标题是“如何创建卡片网格视图布局”。在屏幕截图中没有箭头,所以你想知道如何创建底部带有箭头的视图。 - CommonsWare
@CommonsWare 请看红色矩形框底部,那里有溢出图标。 - N Sharma
2个回答

17

首先,你不应该仅仅为了在卡片视图中实现溢出菜单而使用这个库。

话虽如此,支持库中的CardView是一个带有任何模型背景的FrameLayout。

现在最好的方法是在CardView布局中使用新的Toolbar。

另外,你可以在CardView布局中添加一个ImageView,并执行类似以下操作:

PopupMenu popup = new PopupMenu(getContext(), mImageButton);
MenuInflater inflater = popup.getMenuInflater();
inflater.inflate(R.menu.your_menu, popup.getMenu());

最后(但这并不是很重要),如果现有的卡片视图不够用,即将推出的新版cardslib将使用支持库中的CardView。


1
inflater.inflate() 函数的参数是 R.menu.your_menu_res,它仅仅是你想要填充的 XML 菜单的 ID。第二个参数需要传递 popup.getMenu() - Bhargav

4
这是如何在 android.support.v7.widget.CardView 中正确实现的。在我的示例中,它是 RecyclerView 中的 CardView,因此我在适配器中的 onBindViewHolder 方法中进行了设置:
public class DashboardItemAdapter extends RecyclerView.Adapter<DashboardItemAdapter.ViewHolder> {
    ArrayList<Item> mItems = new ArrayList<>();
    private Context mContext;

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        mContext = parent.getContext();
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_dashboard, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder vh, int position) {
        final Item item = mItems.get(position);

        ...

        PopupMenu popup = new PopupMenu(mContext, vh.btnMenu);
        popup.inflate(R.menu.dashboard_card_waiting);
        popup.setOnMenuItemClickListener(item -> {
            switch (item.getItemId()) {
                case R.id.action_cancel:
                    cancelItem();
                    return true;
                default:
                    return true;
            }
        });
        vh.btnMenu.setOnClickListener(btn -> popup.show());
    }

    ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接