1.构造函数
//方法一: public PopupWindow (Context context) //方法二: public PopupWindow(View contentView) //方法三: public PopupWindow(View contentView, int width, int height) //方法四: public PopupWindow(View contentView, int width, int height, boolean focusable)
2.显示函数
//相对某个控件的位置(正左下方),无偏移 showAsDropDown(View anchor): //相对某个控件的位置,有偏移;xoff表示x轴的偏移,正值表示向左,负值表示向右;yoff表示相对y轴的偏移,正值是向下,负值是向上; showAsDropDown(View anchor, int xoff, int yoff): //相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移 showAtLocation(View parent, int gravity, int x, int y):
3.其他常用函数
public void dismiss() //消失 public void setFocusable(boolean focusable) //获取焦点,点击空白处消失 public void setTouchable(boolean touchable) //设置PopupWindow是否响应touch事件,默认是true public void setOutsideTouchable(boolean touchable) //PopupWindow以外的区域是否可点击,即如果点击PopupWindow以外的区域,PopupWindow是否会消失。
public void setBackgroundDrawable(Drawable background)//只有设置了这个,setOutsideTouchable才有用
全屏显示前提mPopWindow的根目录需要设置
android:layout_width="match_parent"
android:layout_height="match_parent"
使用代码
mPopWindow = new PopupWindow(contentView, ViewGroup.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, true);
popwinodw显示的时候设置背景透明度
public void backgroundAlpha(float bgAlpha) { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.alpha = bgAlpha; //0.0-1.0 getWindow().setAttributes(lp); }
popwinodw show之前设置
backgroundAlpha(0.5f);
这样的话消失的时候背景透明度是不变的,这个显然和我们的想法是相悖的,所以需要设置监听
mPopWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { backgroundAlpha(1f); } });
popwinodw代码:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:clipToPadding="true" android:fitsSystemWindows="true" android:gravity="center"> <LinearLayout android:layout_width="match_parent" android:layout_height="150dp" android:layout_marginLeft="24dp" android:layout_marginRight="24dp" android:background="@drawable/corner5" android:orientation="vertical"> <LinearLayout android:id="@+id/computer" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:orientation="horizontal"> <ImageView android:layout_width="22dp" android:layout_height="22dp" android:layout_marginLeft="24dp" android:src="@drawable/ic_launcher" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="24dp" android:text="计算机" android:textColor="#505050" android:textSize="16sp" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1px" android:background="#d6d6d6" /> <LinearLayout android:id="@+id/network" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:orientation="horizontal"> <ImageView android:layout_width="22dp" android:layout_height="22dp" android:layout_marginLeft="24dp" android:src="@drawable/ic_launcher" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="24dp" android:text="网络" android:textColor="#505050" android:textSize="16sp" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1px" android:background="#d6d6d6" /> <LinearLayout android:id="@+id/popWindowDismiss" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center_vertical" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="24dp" android:text="取消" android:textColor="#d6d6d6" android:textSize="16sp" /> </LinearLayout> </LinearLayout> </RelativeLayout>
居中显示PopWindow效果图
代码
private void showPopupWindow() { //设置contentView View contentView = LayoutInflater.from(CustomActivity.this).inflate(R.layout.popwindow_change, null); mPopWindow = new PopupWindow(contentView, ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); // mPopWindow = new PopupWindow(contentView, // ViewGroup.LayoutParams.MATCH_PARENT, // WindowManager.LayoutParams.MATCH_PARENT, // true); mPopWindow.setFocusable(true); mPopWindow.setBackgroundDrawable(new BitmapDrawable()); backgroundAlpha(0.5f); mPopWindow.setContentView(contentView); //设置各个控件的点击响应 LinearLayout tv1 = (LinearLayout)contentView.findViewById(R.id.computer); LinearLayout tv2 = (LinearLayout)contentView.findViewById(R.id.network); LinearLayout tv3 = (LinearLayout)contentView.findViewById(R.id.popWindowDismiss); tv1.setOnClickListener(this); tv2.setOnClickListener(this); tv3.setOnClickListener(this); //显示PopupWindow rootview是当前Activity的view View rootview = LayoutInflater.from(CustomActivity.this).inflate(R.layout.activity_custom, null); mPopWindow.showAtLocation(rootview, Gravity.CENTER, 0, 0); mPopWindow.setOnDismissListener(new PopupWindow.OnDismissListener() { @Override public void onDismiss() { backgroundAlpha(1f); } }); }
从底部显示效果图:
代码:
剧中显示代码改一句话
mPopWindow.showAtLocation(rootview, Gravity.BOTTOM, 0, 0);