自定义PopupWindow弹出后背景灰色状态
Posted Trouble_Chen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自定义PopupWindow弹出后背景灰色状态相关的知识,希望对你有一定的参考价值。
最近有做fragment里弹出自定义popupWindow,
fragment里面调用:
// 点击加号按钮
@Click
protected void ll_add_pharmacy() {
mPopTempList.showAsDropDown(ll_add_pharmacy, 0, getActivity()); // 传给popupWindow getActivity();
mPopTempList.setOnClickListener(new OnOKClickListener() {
@Override
public void onOKClick(int which) {
switch (which) {
case 1: // 添加药品
Intent intent = new Intent();
// ONEALLBACTH 代表单品或批量添加 标识1代表单品
intent.putExtra("ONEALLBACTH", "1");
intent.setClass(getActivity(), AnnotationClassUtil.get(AddNewPharmacyActivity1.class));
getActivity().startActivityForResult(intent, MainActivity.CONNECT_GUN);
break;
}
}
});
}
自定义popupWindow:
package com.hospital.widget;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.PopupWindow.OnDismissListener;
import android.widget.TextView;
import com.hospital.R;
/**
*
* @ClassName: PopSelectPharmacy
* @Description: TODO
* @author wuc
*
*/
public class PopSelectPharmacy implements View.OnClickListener{
/**
* int which
* 1.添加药品 2.库存提醒 3.搜索药品
* @author Achen
*
*/
public static interface OnOKClickListener {
public void onOKClick(int which);
}
//生命接口对象
private OnOKClickListener mClickListener;
//设置监听器 也就是实例化接口
public void setOnClickListener(final OnOKClickListener clickListener) {
this.mClickListener = clickListener;
}
private Context context;
private PopupWindow popupWindow;
private TextView tv_addDrug, tv_storageRemind, tv_searchDrug;
private LayoutInflater inflater;
private ImageView iv_yfgl_addXiaoHongDianKuCun ;
public ImageView getIv_yfgl_addXiaoHongDianKuCun() {
return iv_yfgl_addXiaoHongDianKuCun;
}
public void setIv_yfgl_addXiaoHongDianKuCun(
ImageView iv_yfgl_addXiaoHongDianKuCun) {
this.iv_yfgl_addXiaoHongDianKuCun = iv_yfgl_addXiaoHongDianKuCun;
}
public PopSelectPharmacy(final Context context) {
this.context = context;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.pop_selectpharmacy, null);
tv_addDrug = (TextView) view.findViewById(R.id.tv_addDrug);
tv_storageRemind = (TextView) view.findViewById(R.id.tv_storageRemind);
tv_searchDrug = (TextView) view.findViewById(R.id.tv_searchDrug);
iv_yfgl_addXiaoHongDianKuCun = (ImageView) view.findViewById(R.id.iv_yfgl_addXiaoHongDianKuCun);
tv_addDrug.setOnClickListener(this);
tv_storageRemind.setOnClickListener(this);
tv_searchDrug.setOnClickListener(this);
popupWindow = new PopupWindow(view, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
// 这个是为了点击“返回Back”也能使其消失,并且并不会影响你的背景(很神奇的)
popupWindow.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.add_drugbackground));
}
// 下拉式 弹出 pop菜单 parent 右下角
public void showAsDropDown(View parent, String key, Activity activity) {
showAsDropDown(parent, 0, activity);
}
private View parent;
/**
* 为了解决 设置背景后padding无效的bug
* @param parent
* @param key
* @param padding
*/
public void showAsDropDown(View parent, int[] padding) {
this.parent = parent;
popupWindow.showAsDropDown(parent, 0, context.getResources().getDimensionPixelSize(R.dimen.popmenu_yoff));
popupWindow.setBackgroundDrawable(context.getResources().getDrawable(R.drawable.add_drugbackground));
parent.setPadding(padding[0], padding[1], padding[2], padding[3]);
popupWindow.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
}
});
// 使其聚集
popupWindow.setFocusable(true);
// 设置允许在外点击消失
popupWindow.setOutsideTouchable(true);
// 刷新状态
popupWindow.update();
}
public void showAsDropDown(View parent, int padding, final Activity activity) {
this.parent=parent;
int[] paddings = { padding, padding, padding, padding };
showAsDropDown(parent, paddings);
// 设置背景颜色变暗
WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
lp.alpha = 0.7f;
activity.getWindow().setAttributes(lp);
popupWindow.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss() {
WindowManager.LayoutParams lp = activity.getWindow().getAttributes();
lp.alpha = 1f;
activity.getWindow().setAttributes(lp);
}
});
}
public void dismissPop() {
if(parent!=null)
popupWindow.dismiss();
}
public PopupWindow getPopupWindow() {
return popupWindow;
}
@Override
public void onClick(final View v) {
// TODO Auto-generated method stub
final int id = v.getId();
switch (id) {
case R.id.tv_addDrug:
if (this.mClickListener != null) {
this.mClickListener.onOKClick(1);
popupWindow.dismiss();
}
break;
case R.id.tv_storageRemind:
if (this.mClickListener != null) {
this.mClickListener.onOKClick(2);
popupWindow.dismiss();
}
break;
case R.id.tv_searchDrug:
if (this.mClickListener != null) {
this.mClickListener.onOKClick(3);
popupWindow.dismiss();
}
break;
}
}
}
以上是关于自定义PopupWindow弹出后背景灰色状态的主要内容,如果未能解决你的问题,请参考以下文章
一个实现带灰色蒙版从底部弹出的PopupWindow基类封装(解决蒙版覆盖虚拟按键问题)
一个实现带灰色蒙版从底部弹出的PopupWindow基类封装(解决蒙版覆盖虚拟按键问题)