popupwindow 全屏遮罩并解决SDK>21窗口最上方状态栏无法遮罩

sdk 版本小于21时,弹出的popupwindow时, 窗口最上方状态栏无法遮罩。
修复无法遮罩代码如下

import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.LinearInterpolator;
import android.widget.PopupWindow;
import android.widget.TextView;

import com.blankj.utilcode.utils.ScreenUtils;

/**
 * 类名称: WaitScreen 
* 类描述: 等待界面
* 创建人: Lincoln
* 修改人: Lincoln
* 修改时间: 16-9-28 下午5:35
* 修改备注:
* * @version 1.0.0
*/
public class WaitScreen { private PopupWindow popupWindow; private Context context; private View view; private final View progress; private final View wait; private final TextView messageView; public WaitScreen(Activity context) { this.context = context; view = LayoutInflater.from(context).inflate(R.layout.weight_wait_screen , null); popupWindow = new PopupWindow(view, ScreenUtils.getScreenWidth(context), ScreenUtils.getScreenHeight(context)); //sdk > 21 解决 标题栏没有办法遮罩的问题 popupWindow.setClippingEnabled(false); progress = view.findViewById(R.id.progress); wait = view.findViewById(R.id.wait); messageView = (TextView) view.findViewById(R.id.message); } /** * 弹出等待提示框 */ public PopupWindow show() { //显示在界面0,0位置上 popupWindow.showAtLocation(view, Gravity.NO_GRAVITY,0,0); Animation rotateAnim = AnimationUtils.loadAnimation(context, R.anim.rotate_progress); LinearInterpolator lin = new LinearInterpolator(); rotateAnim.setInterpolator(lin); progress.startAnimation(rotateAnim); return popupWindow; } /** * 弹出等待提示框 */ public PopupWindow show(String message) { popupWindow.showAsDropDown(view); Animation rotateAnim = AnimationUtils.loadAnimation(context, R.anim.rotate_progress); LinearInterpolator lin = new LinearInterpolator(); rotateAnim.setInterpolator(lin); progress.startAnimation(rotateAnim); messageView.setText(message); return popupWindow; } /** * 以动画的方式关闭等待弹屏 */ public void close(OnAnimationEnd onAnimationEnd) { if (popupWindow != null && popupWindow.isShowing()) { popupWindow.setFocusable(false); Animation alphaAnim = AnimationUtils.loadAnimation(context, R.anim.alpha_hide_progress); LinearInterpolator lin = new LinearInterpolator(); alphaAnim.setInterpolator(lin); wait.startAnimation(alphaAnim); alphaAnim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { new Handler().post(() -> popupWindow.dismiss()); onAnimationEnd.animationEnd(); } @Override public void onAnimationRepeat(Animation animation) { } }); } } /** * 以动画的方式关闭等待弹屏 */ public void close() { if (popupWindow != null && popupWindow.isShowing()) { popupWindow.setFocusable(false); Animation alphaAnim = AnimationUtils.loadAnimation(context, R.anim.alpha_hide_progress); LinearInterpolator lin = new LinearInterpolator(); alphaAnim.setInterpolator(lin); wait.startAnimation(alphaAnim); alphaAnim.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation animation) { } @Override public void onAnimationEnd(Animation animation) { new Handler().post(() -> popupWindow.dismiss()); } @Override public void onAnimationRepeat(Animation animation) { } }); } } /** * 关闭弹屏 */ public void dismiss() { if (popupWindow != null && popupWindow.isShowing()) { popupWindow.dismiss(); } } public interface OnAnimationEnd{ void animationEnd(); } }

关键代码

popupWindow.setClippingEnabled(false);

你可能感兴趣的:(Android)