Android PopupWindow背景半透明兼容方案
2017-02-08 17:44
405 查看
大家想必对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);
相关文章推荐
- Android中PopupWindow设置背景的方案处理
- Android中为PopupWindow设置半透明背景的方案(兼容华为手机)
- Android PopupWindow 弹窗背景半透明,设置最大高度
- Android PopupWindow背景半透明兼容方案
- Android PopupWindow背景半透明兼容方案
- android popupwindow弹出后背景变暗
- popupWindow弹出来后,背景变暗,半透明
- PopupWindow设置背景亮度完美方案
- popupwindow弹出后,屏幕背景变成半透明
- android中用PopUpWindow自定义Menu菜单 带半透明效果
- Android popupWindow设置背景透明度无效问题
- Android背景变暗的PopupWindow 可指定变暗区域
- popupWindow设置后完美解决返回键响应无效的方案以及popupWindow背景透明方案
- Android之PopupWindow-底部弹出,以及中间弹出有变暗效果
- Android UI PopupWindow 简单使用
- Android应用开发中半透明效果实现方案
- Android入门第十篇之PopupWindow
- Android PopupWindow实现右侧、左侧和底部弹出菜单
- popupWindow设置显示和消失的动画 add:如何点击背景或返回键让popuwindow消失
- Android ADT+eclipse安装及兼容问题解决方案(不太准确)