美文网首页
点击RecycleView或者ListView每个item显示一

点击RecycleView或者ListView每个item显示一

作者: 我就是杨过 | 来源:发表于2018-04-20 14:35 被阅读0次

    代码如下

    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);
        }
    

    相关文章

      网友评论

          本文标题:点击RecycleView或者ListView每个item显示一

          本文链接:https://www.haomeiwen.com/subject/jkoakftx.html