android popupwindow背景,Android PopupWindow背景半透明兼容方案

大家想必对PopupWindow不会很陌生吧,我们在开发中经常会遇到要求使其背景半透明的需求,但网上的很多解决方案只能是在大部分机型上满足要求,像华为这样的机型就会发现我们原来设置的背景变暗效果的代码并没有起效果。

这里我贴出最终的兼容方案:

View contentView;

LayoutInflater mLayoutInflater = LayoutInflater.from(activity);

contentView = mLayoutInflater.inflate(R.layout.layout_popupwindow,

null);

pop = new PopupWindow(contentView,

ViewGroup.LayoutParams.MATCH_PARENT, (int) context.getResources().getDimension(R.dimen.y568));

TextView tvTitle = (TextView) contentView.findViewById(R.id.text);

tvTitle.setText(strTitle);

ListView listView = (ListView) contentView.findViewById(R.id.list);

// 产生背景变暗效果

WindowManager.LayoutParams lp = activity.getWindow()

.getAttributes();

lp.alpha = 0.4f;

activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

activity.getWindow().setAttributes(lp);

pop.setTouchable(true);

pop.setFocusable(true);

pop.setBackgroundDrawable(new BitmapDrawable());

pop.setOutsideTouchable(true);

pop.showAtLocation(contentView, Gravity.BOTTOM, 0, 0);

pop.update();

pop.setOnDismissListener(new PopupWindow.OnDismissListener() {

// 在dismiss中恢复透明度

public void onDismiss() {

WindowManager.LayoutParams lp = activity.getWindow()

.getAttributes();

lp.alpha = 1f;

activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

activity.getWindow().setAttributes(lp);

}

});

listView.setOnItemClickListener(onItemClickListener);

listView.setAdapter(adapter);

注:特别是下面几行代码

// 产生背景变暗效果

WindowManager.LayoutParams lp = activity.getWindow()

.getAttributes();

lp.alpha = 0.4f;

activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

activity.getWindow().setAttributes(lp);

pop.setTouchable(true);

pop.setFocusable(true);

pop.setBackgroundDrawable(new BitmapDrawable());

pop.setOutsideTouchable(true);

pop.showAtLocation(contentView, Gravity.BOTTOM, 0, 0);

pop.update();

pop.setOnDismissListener(new PopupWindow.OnDismissListener() {

// 在dismiss中恢复透明度

public void onDismiss() {

WindowManager.LayoutParams lp = activity.getWindow()

.getAttributes();

lp.alpha = 1f;

activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

activity.getWindow().setAttributes(lp);

}

});

网上很多方案都要求加下面这两行代码,但其实加上反而会影响华为这种机型的显示效果

ColorDrawable dw = new ColorDrawable(-00000);

popupWindow.setBackgroundDrawable(dw);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值