Popupwindow 基本用法

本文包括popupwindow的基本用法、位置、大小设置和一些特殊情况
本文使用Kotlin

常规用法

//获取布局
 val view = layoutInflater.inflate(R.layout.main_menu_popup, null)
//设置布局 参数:1、布局 2、宽 3、高  这里我设置了自适应
    val popup = PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT
            , ViewGroup.LayoutParams.WRAP_CONTENT)
//设置背景   注意:如果没有这段代码  在显示popup之后 点返回按钮或者点击外部界面  都不会使popup消失
    popup.setBackgroundDrawable(resources.getDrawable(R.drawable.dropdown))
    popup.isFocusable = true
//点击外部消失
    popup.isOutsideTouchable = true
    popup.update()
    val main_menu_over = findViewById(R.id.main_menu_over)
//设置popup显示位置,参数:1、popup的位置是相对于main_menu_over这个控件设置的 2、位置显示方式 默认是控件的右下坐标 3、x的偏移量 单位dp 4、y的偏移量 单位dp
// popup.showAsDropDown(main_menu_over, -view.measuredWidth - 2, 10,Gravity.NO_GRAVITY)
  popup.showAsDropDown(main_menu_over, -view.measuredWidth - 2, 10)

上述代码中,在设置popup位置的时候会出现一个小问题–设置popup的x的偏移量之后,并没有改变。下面举个例子:

如图 我的popup 是相对于 “+” 号设置位置的,代码如下
popup.showAsDropDown(main_menu_over, - 2, 10)
我明明设置了 x偏移量是2 为什么没有移动呢?
因为 “+”在最右边,而popup默认是相对于 “+”的 右下角坐标设置偏移量,所以popup的真实位置是:popup的左边框和屏幕的右边重合。如下图红色部分(不太会画图,将就下看看)

下面是我自己理解,如有错误请指出。“popupwindow会始终出现在屏幕上”。这个原因,待我看过源码后,再为大家解释吧。
因为上述的原因,所以看到的popup是在最右边。如果想移动类似这样的情况,就需要把x偏移量 加上 popup本身的一个宽度才行。 向左移动 减 向右移动 加
//popup控件
val main_menu_over = findViewById (R.id.main_menu_over)
popup.showAsDropDown(main_menu_over, -view.measuredWidth -2, 10)

//以第一个参数为参照物
    popup.showAsDropDown(main_menu_over, -xDis, 5, Gravity.NO_GRAVITY)
    //以屏幕做参照物   与第一个参数无关
//popup.showAtLocation(main_menu_over, Gravity.RIGHT, -118 - 5, 5)

以上是两种显示popup的方法

你可能感兴趣的:(Android)