个性化上下文菜单,如Pinterest菜单

9

我一直在寻找类似Pinterest菜单的东西,每当按下GridView中的项目时。我知道这是一个太宽泛的问题。但是对问题的小打击将提供实现这些的正确方法。

问题:

如何在GridView项目上实现自定义上下文菜单,例如Contacts+或Pinterest上下文菜单?

Pinterest Context Menu Contacts+ Context Menu

尝试过:

ArcMenu:但它们是整个应用程序中滑动菜单或弹出菜单的替代品。 我想要可以在GridView项目上创建的菜单。

Satellite Menu:与ArcMenu相同,是整个应用程序中滑动菜单或弹出菜单的替代品。

请启发我如何实现这些行为。


1
你在这个问题上有任何进展吗? - dwbrito
1
你在这段代码中成功了吗?因为我也对这段代码感到厌烦。 - user2323471
4个回答

1

我认为您可以使用PopupWindow来满足您的需求,而不是使用Context Menu

 //Custom popup view
View view= layoutInflater.inflate(R.layout.popupview, null);  
PopupWindow popupWindow = new PopupWindow(
               view, 
               LayoutParams.WRAP_CONTENT,  
                     LayoutParams.WRAP_CONTENT);

//Display popup window on clicking anything
//Displays pop up window near button with offsets 10 and -10
popupWindow.showAsDropDown(button, 10, -10);

获取更多信息

http://developer.android.com/reference/android/widget/PopupWindow.html

http://android-er.blogspot.in/2012/03/example-of-using-popupwindow.html


我可以肯定地推荐使用PopupWindow(),但它有自己的限制。一个需要手动解除它(通过编程方式解除),同时由于PopUpWindow()和在特定位置或作为下拉菜单渲染PopupWindow(),会抛出很多窗口泄漏错误,这对于调整有效的UIx没有用处。 - Vikalp Patel

0

0

我正在使用修改过的ArcMenu(只进行了小的视觉修改)来实现类似的功能。它非常适用于gridview(我正在使用它与StaggeredGridView onitemclick)。

你只需要在xml中定义它,将其放置在gridview项内,并设置Visibility:gone,然后在你的gridview adapter或activity中,在项目被点击时将其设置为可见即可...

不知道你为什么说它是针对整个应用程序的,它也可以作为一个元素项使用。


-1
你可以查看我创建的这个库:

https://github.com/reyanshmishra/PinMenu

你可以将其克隆并作为模块导入你的应用程序,然后执行类似以下的操作:
在你的 XML 布局中:
<?xml version="1.0" encoding="utf-8"?>
<com.reyanshmishra.pinmenu.PinMenuHolder 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="match_parent"
    app:pin_holder_draw_over_view="true"
    app:pin_holder_overlay_color="#90ffffff">



    <com.reyanshmishra.pinmenu.PinMenu
        android:id="@+id/one"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:elevation="5dp"
        android:padding="5dp"
        android:scaleType="centerInside"
        android:src="@drawable/ic_close_black_24dp"
        app:pin_background_color="@color/white"
        app:pin_name="Cancel"
        app:pin_selected_color="#BD081C" />



    <com.reyanshmishra.pinmenu.PinMenu
        android:id="@+id/three"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:elevation="5dp"
        android:padding="5dp"
        android:scaleType="centerInside"
        android:src="@drawable/share_variant"
        app:pin_background_color="@color/white"
        app:pin_name="Share"
        app:pin_selected_color="#BD081C" />


    <com.reyanshmishra.pinmenu.PinMenu
        android:id="@+id/four"
        android:layout_width="48dp"
        android:layout_height="48dp"
        android:elevation="5dp"
        android:padding="5dp"
        android:scaleType="centerInside"
        android:src="@drawable/dots_horizontal"
        app:pin_background_color="@color/white"
        app:pin_name="More"
        app:pin_selected_color="#BD081C" />


</com.reyanshmishra.pinmenu.PinMenuHolder>

现在是Java:

PinDialog mPinDialog = new PinDialog(this);
        mPinDialog.setContentView(R.layout.layout_pin_menu);
           mPinDialog.setPinSelectListener(new PinSelectListener() {
                    @Override
                    public void pinSelected(PinMenu pinMenu) {
                        Toast.makeText(mContext, "" + pinMenu.getPinName(), Toast.LENGTH_SHORT).show();
                    }
                });

        mPinDialog.addToRecyclerView(mRecyclerView);

它仍处于开发阶段,因此只支持recyclerview。对于实现的深度,您可以浏览库的类。我认为我不能在这里放置所有代码。

结果类似于这样:

enter image description here


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