在recycleler中显示弹出窗口,确切地显示按钮的位置,在android中

时间:2017-09-27 05:40:50

标签: android android-recyclerview android-popupwindow

我正在使用android中的recyclerView处理gridLayout。我在每个网格项目中都有一个选项,我想要显示另一个类的弹出活动。请看图片 - enter image description here

每个项目都有一个菜单选项。我的弹出活动java名称是 CustomPop.Class 。我使用recyclerView显示gridViews,其holder方法就像

    public void onBindViewHolder(ViewHolder holder, int position) {
    holder.img_chatroom_menu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Intent intent = new Intent(view.getContext(), ChatroomPopup.class);
            view.getContext().startActivity(intent);

        }
    });
}

通过这个我可以显示弹出活动。但问题是它出现在活动的中间,但我希望它在菜单选项旁边打开。

2 个答案:

答案 0 :(得分:2)

as per my above comment 您可以使用 Popup Menu

  

如果空格可用,则Android弹出菜单会在锚文本下方显示菜单,否则会在锚文本上方显示。如果在弹出菜单外单击,它就会消失。

尝试此创建菜单文件

file:poupup_menu.xml

<menu xmlns:androclass="http://schemas.android.com/apk/res/android" >  

    <item  
        android:id="@+id/one"  
        android:title="One"/>  

    <item  
        android:id="@+id/two"  
        android:title="Two"/>  

    <item  
        android:id="@+id/three"  
        android:title="Three"/>  

</menu>  

比使用像这样的创建弹出菜单

holder.img_chatroom_menu.setOnClickListener(new OnClickListener() {  

           @Override  
           public void onClick(View v) {  
            //Creating the instance of PopupMenu  
            PopupMenu popup = new PopupMenu(MainActivity.this, button1);  
            //Inflating the Popup using xml file  
            popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());  

            //registering popup with OnMenuItemClickListener  
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {  
             public boolean onMenuItemClick(MenuItem item) {  
              Toast.makeText(MainActivity.this,"You Clicked : " + item.getTitle(),Toast.LENGTH_SHORT).show();  
              return true;  
             }  
            });  

            popup.show();//showing popup menu  
           }  
          });//closing the setOnClickListener method  

此处示例演示链接 how to create pop-up menu in android

答案 1 :(得分:1)

您必须使用弹出菜单来实现您想要的效果,如下所示:

创建菜单用户res > menu > your_menu.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/menu_item_one"
        android:title="Item One" />
    <item
        android:id="@+id/menu_item_two"
        android:title="Item Two" />
</menu>

将上述代码放入style.xml

<style name="popupMenuStyle" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:textColor">@color/colorBlack</item>
        <item name="android:itemBackground">@color/colorWhite</item>
        <!--<item name="android:popupBackground">@android:color/white</item>-->
    </style>

在各自的RecyclerView Adapter

holder.myAlbumsOptionButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Context wrapper = new ContextThemeWrapper(context, R.style.popupMenuStyle);
                final PopupMenu popup = new PopupMenu(wrapper, v, Gravity.END);
                popup.inflate(R.menu.your_menu);

                popup.show();

                popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()) {
                            case R.id.menu_item_one:

                                //Do operation if menu_item_one

                                break;
                            case R.id.menu_item_two:

                                //Do operation if menu_item_two

                                break;
                        }
                        return false;
                    }
                });
            }
        });

了解有关PopupMenu

的更多信息