android item弹出popupwindow recycleview_点击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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值