android PopupWindow

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);
原文地址:https://www.cnblogs.com/hualuoshuijia/p/6943759.html