需求:PopupWindow 在弹出的时候需要设置背景为半透明状态,写个简单的工具类,方法如下:
public class MainActivity extends AppCompatActivity {
private PopupWindow mPop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.but).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
showPop();
}
});
}
private void showPop(){
WindowUtil.lucencyBackground(this);
View contentView = LayoutInflater.from(this).inflate(R.layout.pop,null);
if (mPop == null){
mPop = new PopupWindow(contentView,ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,true);
}
mPop.setBackgroundDrawable(new BitmapDrawable());
mPop.setContentView(contentView);
mPop.setOutsideTouchable(true);
mPop.showAtLocation(this.getWindow().getDecorView(), Gravity.CENTER, 0, 0);
mPop.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
mPop.dismiss();
WindowUtil.cancelBackground(MainActivity.this);
}
});
}
}
public static void lucencyBackground(Activity activity) {
WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
lp.alpha = 0.3f;
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
activity.getWindow().setAttributes(lp);
}
public static void cancelBackground(Activity activity) {
WindowManager.LayoutParams lp1 = activity.getWindow().getAttributes();
lp1.alpha = 1f;
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
activity.getWindow().setAttributes(lp1);
}
源码连接