美文网首页扩展Android知识手机移动程序开发
PopupWindow的一般使用和去除黑色边框

PopupWindow的一般使用和去除黑色边框

作者: 安卓程序猿 | 来源:发表于2017-03-14 16:43 被阅读747次

    前言

    开发中发现默认的PopupWindow会有黑色边框,以前在做PopupWindow的时候,大部分都是拷贝网上的代码,就没有太多在意。今天发现这个问题后,就特别留意了一下。

    欢迎搜索微信公众号SamuelAndroid关注我,文章末尾有公众号二维码。

    初始化PopupWindow

            popupWindow = new PopupWindow(this);
            View view = LayoutInflater.from(this).inflate(R.layout.popup_sort, null);
            popupWindow.setContentView(view);
            popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
            //PopupWindow对象设置高度
            popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
            //PopupWindow对象设置获取焦点
            popupWindow.setFocusable(true);
            //PopupWindow对象设置可以触发点击事件
            popupWindow.setTouchable(true);
            popupWindow.setOutsideTouchable(true);
    

    显示PopupWindow

    这里我们使用v4包里的PopupWindowCompat,详细代码如下:

            //使用V4提供的PopupWindowCompat的showAsDropDown方法显示出PopupWindow对象
            //五个参数为:
            //popup - 需要显示的PopupWindow对象
            //anchor - 需要在什么View组件上显示
            //xoff - 显示在View组件上X轴横向坐标点
            //yoff - 显示在View组件上Y轴横向坐标点
            //gravity - 显示的对齐方式
            PopupWindowCompat.showAsDropDown(popupWindow, anchor, 0, 0, Gravity.LEFT);
    

    此时PopupWindow会有黑色边框,如何去除呢?一下有两种方法:

    1. 方法一:设置style
    <style name="Transparent_Dialog" parent="@android:style/Theme.Dialog">
            <item name="android:windowBackground">@android:color/transparent</item>
        </style>
    

    初始化PopupWindow改为:

    popupWindow = new PopupWindow(this, null, R.style.Transparent_Dialog);
    

    此时黑色边框就已经没了。

    注:采用该方法,发现点击PopupWindow外无法dismiss掉,没有找到解决方法,欢迎知道解决方案的给我留言,谢谢

    1. 方法二:代码里是指background
    popupWindow.setBackgroundDrawable(new ColorDrawable(0));//new ColorDrawable(0)即为透明背景
    

    该方法可以点击区域外可以正常dismiss。

    完整代码如下:

    private void showPopWindow(View anchor) {
            PopupWindow popupWindow = new PopupWindow(this);
            View view = LayoutInflater.from(this).inflate(R.layout.popup_sort, null);
            popupWindow.setContentView(view);
            popupWindow.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
            //PopupWindow对象设置高度
            popupWindow.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
            //PopupWindow对象设置获取焦点
            popupWindow.setFocusable(true);
            //PopupWindow对象设置可以触发点击事件
            popupWindow.setTouchable(true);
            popupWindow.setOutsideTouchable(true);
            popupWindow.setBackgroundDrawable(new ColorDrawable(0));
            //使用V4提供的PopupWindowCompat的showAsDropDown方法显示出PopupWindow对象
            //五个参数为:
            //popup - 需要显示的PopupWindow对象
            //anchor - 需要在什么View组件上显示
            //xoff - 显示在View组件上X轴横向坐标点
            //yoff - 显示在View组件上Y轴横向坐标点
            //gravity - 显示的对齐方式
            PopupWindowCompat.showAsDropDown(popupWindow, anchor, 0, 0, Gravity.LEFT);
    }
    

    更多内容可以关注我的公众号或者搜索SamuelAndroid关注我:**

    公众号

    历史文章:

    相关文章

      网友评论

      • TastyDeath:设置theme后再设置一个背景图就行,能点击dismiss大概
        安卓程序猿: @TastyDeath 如果设置背景就可以去掉边框了,

      本文标题:PopupWindow的一般使用和去除黑色边框

      本文链接:https://www.haomeiwen.com/subject/ugdhnttx.html