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

2018-04-20  本文已影响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);
    }
上一篇下一篇

猜你喜欢

热点阅读