两种PopupWindow的实现

出现在控件下方的PopupWindow

这种方法可以自己设置出现的位置,主要是以出现在空间的下方为主;
布局都是简单布局,就不演示布局代码了;

效果图:

两种PopupWindow的实现_第1张图片

先看一下设置背景色的代码:
<resources>

    
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        
        "colorPrimary">@color/colorPrimary
        "colorPrimaryDark">@color/colorPrimaryDark
        "colorAccent">@color/colorAccent
        "android:popupWindowStyle">@style/popBackground
    style>
    <style name="popBackground" parent="AppTheme">
        "android:popupBackground">#DAE0E0
    style>
resources>
*设置以下默认的背景颜色,如果不设置 默认是黑色半透明;*
java代码
public void myPop(){
        //获取自定义的布局view
        View view = LayoutInflater.from(this).inflate(R.layout.my_pop, null);
        //获取其中的ListView
        lv = view.findViewById(R.id.lv);
        String[] s = {"添加好友","添加群","扫一扫","面对面","我的钱包"};
        //设置适配
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.support_simple_spinner_dropdown_item,s);
        lv.setAdapter(adapter);
        //创建PopupWindow对象
        PopupWindow window = new PopupWindow(this);
        //此三个属性是必须要有的!!!!
        //给PopupWindow设置一个View
        window.setContentView(view);
        //设置宽和高
        window.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        window.setWidth(300);
        //点击窗口意外  窗口消失
        window.setOutsideTouchable(true);
        //显示在某个控件的下方
        window.showAsDropDown(img);
    }
还有其他的显示方法 除了上面的显示在控件下方,还可以设置偏移量

两种PopupWindow的实现_第2张图片

另外一种,根据父控件设置位置:window.showAtLocation(view1, Gravity.BOTTOM,0,0);
				第一个参数是布局,第二个参数是设置显示位置,后面两个参数是偏移量
				出现的位置可以是中间,底部和顶端
				Gravity.TOP//顶端
   			 	Gravity.BOTTOM//底部
    			Gravity.CENTER//中间
java代码
public void myPopupWindow(){
        View view = LayoutInflater.from(this).inflate(R.layout.pop_me, null);
        //获取自定义布局ID
        qx = view.findViewById(R.id.qx);
        //父控件类型转换
        View view1 = LayoutInflater.from(this).inflate(R.layout.activity_day03, null);
        final PopupWindow window = new PopupWindow(Activity_day03.this);
        //设置窗体属性
        window.setContentView(view);
        window.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
        window.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
        //设置点击外部窗体消失
        window.setOutsideTouchable(true);
        //设置从父类控件下部出现   可以设置偏移量
        window.showAtLocation(view1, Gravity.BOTTOM,0,0);
        
        //背景透明度设置
        WindowManager.LayoutParams params = getWindow().getAttributes();
        //设置0.5f为半透明
        params.alpha = 0.5f;
        //将透明度设置回界面
        getWindow().setAttributes(params);

        //点击消失监听
        window.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {
                WindowManager.LayoutParams params = getWindow().getAttributes();
                //设置不透明1.0f
                params.alpha = 1.0f;
                //将透明度设置回界面
                getWindow().setAttributes(params);
                window.dismiss();
            }
        });
    }

效果图如下:

两种PopupWindow的实现_第3张图片

设置位置不同出现的效果则不一样,也有可能因为模拟器的不同,会有不同效果,如果相对窗口中的按钮进行操作,去获取View然后获取控件即可,进行监听就OK了;

你可能感兴趣的:(两种PopupWindow的实现)