两种PopupWindow的实现

出现在控件下方的PopupWindow

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

效果图:

在这里插入图片描述

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

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:popupWindowStyle">@style/popBackground</item>
    </style>
    <style name="popBackground" parent="AppTheme">
        <item name="android:popupBackground">#DAE0E0</item>
    </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);
    }
还有其他的显示方法 除了上面的显示在控件下方,还可以设置偏移量

在这里插入图片描述

另外一种,根据父控件设置位置: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();
            }
        });
    }

效果图如下:

在这里插入图片描述

设置位置不同出现的效果则不一样,也有可能因为模拟器的不同,会有不同效果,如果相对窗口中的按钮进行操作,去获取View然后获取控件即可,进行监听就OK了;
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值