点击RecycleView或者ListView每个item显示一个对话框(Popupwindow实现)

代码如下

public void showPopupWindow(View clickedItem, Profile profile) {   
                                   // clickedItem 是点击的那个item的view对象, profile是数据可以自己定义
        View avatarInRecyclerMemberItem = clickedItem.findViewById(R.id.item_settings_group_avatar);
                                              // R.id.item_settings_group_avatar 是item中的一个组件 用来确定 popupwindow的位置
        if (mPopupWindow == null) {          // 判断是否 为空 每次点击item展示的popupWindow都是同一个对象 只是位置不同数据不同
//根据点击的item的宽和高  设置popupwindow的宽和高,涉及了一点px和dp转换的问题(屏幕适配)。
            final float scacle = this.getResources().getDisplayMetrics().density;
            int popupWindowWidth = clickedItem.getWidth() -   (int) (20 * scacle + 0.5f);
            int popupWindowHeight = WindowManager.LayoutParams.WRAP_CONTENT;     
                                    // 引入popupwindow 里面的自定义布局, 并且设置点击事件 
            View popupWindowView = LayoutInflater.from(this).inflate(R.layout.view_chat_details_group_members_click_show_view, null);
            popupWindowView.findViewById(R.id.tv_member_item_view_profile).setOnClickListener(v ->
                // TODO : for test
                Toast.makeText(getApplicationContext(), "click viewProfile", Toast.LENGTH_LONG).show());
            popupWindowView.findViewById(R.id.tv_member_item_remove_profile).setOnClickListener(v ->
                // TODO : for test
                Toast.makeText(getApplicationContext(), "click removeProfile", Toast.LENGTH_LONG).show());
                                    // 构造对象 传入自定义布局对象,宽和高
            mPopupWindow = new PopupWindow(popupWindowView, popupWindowWidth, popupWindowHeight);
                                    // 点击popupwindow之外  popupwindow消失
            mPopupWindow.setOutsideTouchable(true);
                                     // 设置显示动画
            mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);
                                      //设置可以点击
            mPopupWindow.setTouchable(true);
                                      // 设置 背景图,如果在自定义布局中设置了背景这里就不要再设置了(重复绘制)
            mPopupWindow.setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.grindr_pure_black)));
            mPopupWindow.update();
            mPopupWindow.setFocusable(true);
        }
                      // 根据点击的item中的 view设置item位置,
                      // 0 是 相对于item中的子view的 x方向的偏移量
                      //  -clickedItem.getHeight() 是相对于y方向的偏移量,在这里就是显示在这个布局的开始位置
                      //Gravity.RIGHT 是右对齐,当然也可以显示左对齐。
                      //还有一个显示方法 是根据 activity显示绝对位置 我没有用到 就先不写了
        mPopupWindow.showAsDropDown(avatarInRecyclerMemberItem, 0, -clickedItem.getHeight(), Gravity.RIGHT);
    }
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容