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