popupWindow使用中屏幕抖动或短暂黑屏的问题解决

PopupWindow使用时一般会伴随社背景透明度的改变,这时候会出现两个问题:

1.PopupWindow保留在弹出状态时,当按下home键使app缩进后台,然后再次打开app,会发现popwindow和屏幕会出现剧烈抖动

解决:添加flag代码getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

 

2.PopupWindow解决问题1所带来的伴随问题,当从使用PopupWindow显示之后所在的Activity关闭而暴露上一个Activity的时候会出现短暂黑屏问题

解决:清除flag代码getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

 

知道这两个问题顺带就把工具方法提出来方便所有用PopupWindow的地方使用:

 

   /**
     * 设置屏幕透明度
     * @param activity
     * @param f
     */
    public static void setScreentAlpha(Activity activity, float f) {
        WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
        lp.alpha = f;
        if (f == 1) {
            activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        }else {
            activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
        }
        activity.getWindow().setAttributes(lp);
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PopupWindow是Android非常常见的一种弹窗控件,可以在屏幕上方或下方弹出一个窗口,常用于菜单、提示、选择等场景。 在Service使用PopupWindow需要注意以下几点: 1. 需要在Service创建一个WindowManager对象,用于在屏幕上添加PopupWindow。 2. 在创建PopupWindow时,需要传入一个View对象作为弹出窗口的内容,可以通过LayoutInflater.from(context).inflate()方法获取。 3. 创建PopupWindow时需要指定宽度、高度、动画等属性。 4. 在PopupWindow弹出之后,需要设置其背景色为透明,否则会遮挡住其他View。 以下是一个在Service使用PopupWindow的示例代码: ``` public class MyService extends Service { private WindowManager mWindowManager; private PopupWindow mPopupWindow; @Override public void onCreate() { super.onCreate(); mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); } @Override public int onStartCommand(Intent intent, int flags, int startId) { showPopupWindow(); return super.onStartCommand(intent, flags, startId); } private void showPopupWindow() { // 通过LayoutInflater获取PopupWindow的内容View View contentView = LayoutInflater.from(this).inflate(R.layout.popup_content, null); // 创建PopupWindow,指定宽度、高度、动画等属性 mPopupWindow = new PopupWindow(contentView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); mPopupWindow.setAnimationStyle(R.style.PopupWindowAnimation); mPopupWindow.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); mPopupWindow.setFocusable(true); // 在屏幕上添加PopupWindow mWindowManager.addView(mPopupWindow.getContentView(), getLayoutParams()); // 设置PopupWindow的位置 int x = 0; int y = 0; mPopupWindow.showAtLocation(getWindow().getDecorView(), Gravity.CENTER, x, y); } @Override public void onDestroy() { super.onDestroy(); if (mPopupWindow != null) { mWindowManager.removeView(mPopupWindow.getContentView()); } } private WindowManager.LayoutParams getLayoutParams() { WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(); layoutParams.format = PixelFormat.TRANSLUCENT; layoutParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH; layoutParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT; layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT; return layoutParams; } } ``` 在上述代码,我们首先通过LayoutInflater获取PopupWindow的内容View,然后创建PopupWindow并设置其宽度、高度、动画等属性。接着,我们使用WindowManager将PopupWindow添加到屏幕上,并设置其位置为屏幕央。最后,在Service销毁时,需要手动移除PopupWindow

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值