如何取消默认的背景颜色

调用setBackgroundColor(Color.TRANSPARENT)或者setBackground(0)

如何在dismiss()时不执行退出动画

调用dismiss(false)

点击popupwindow背景部分不想让popupwindow隐藏怎么办

设置setOutSideDismiss(false)

Service里无法弹出

2.2.1版本开始支持

为什么PopupWindow里面的EditText无法粘贴

PopupWindow内的View是无法获取WindowToken的,而粘贴功能也是一个PopupWindow,它的显示必定需要WindowToken,因此无法粘贴。(根据issue tracker,这就是bug,谷歌至今没有修复)

ISSUE REF:#140

Google Issue Tracker:#36984016

如何不让PopupWindow的蒙层覆盖状态栏

设置setOverlayStatusbar(false)

如何点击back键不关闭BasePopup

设置setBackPressEnable(false)

为什么setAlignBackgroundGravity无效

如文档所说,要使setAlignBackgroundGravity生效,必须先设置setAlignBackground的值为true

ISSUE REF:#135

为什么外面的view可滑动的时候,basepopup不随着滑动而更新位置

如wiki所说,请先设置linkTo方法,如果您自行实现视图变化监听并更新basePopup,请调用update方法

ISSUE REF:#139

为什么在api17下,含有AdapterView的Popup会崩溃

issue title 感谢
#148 一个错误的记录,以免朋友们踩坑 leojiao123

为什么BasePopup的宽度不对或者留有一条缝隙

请务必留意您是否使用了头条类等修改Density的适配方案,BasePopup只遵循官方的测量方法并没有额外的添加别的测量方式,因此如果因为第三方修改导致的适配问题,本库概不负责
如果您用的是AndroidAutoSize,请尝试issue#13的解决方案:

在任何情况下本来适配正常的布局突然出现适配失效,适配异常等问题,只要重写 Activity 的 getResources() 方法即可,如果是 Dialog、PopupWindow 等控件出现适配失效或适配异常,同样在每次 show() 之前调用 AutoSize#autoConvertDensity() 即可

为什么BasePopup不能将锚点View设置为PopupWindow中的View

会抛出类似于 android.view.WindowManager$BadTokenException: Unable to add window — token android.view.ViewRootImplXXXis not valid; is your activity running?

2.2.8版本开始支持

关于导航栏颜色、状态栏颜色等问题

PopupWindow没有自己的Window,因此theme、windowflag都是跟随宿主的(宿主一般是Activity)。因此如果BasePopup在显示的时候修改了windowflag等问题,这就等于越界处理了,对于一个基本库来说,这是不被允许的。
因此如果您需要弹窗后修改导航栏颜色、状态栏颜色等,请在show()之前设置您的宿主theme和windowflag,BasePopup会使用宿主的样式的。

PopupWindow无法弹出

请排查以下问题:

  • 宿主windowType是否为WindowManager.LayoutParams.TYPE_APPLICATION_PANEL
    • WindowManager.LayoutParams.TYPE_APPLICATION_PANEL是PopupWindow使用的windowType,如果dialog强行改为这个type,会导致系统识别为SubWindow,因此不会给windowToken,没有windowToken,则popupwindow是无法弹出来的。
    • 相关issue:#325
  • 请检查您的布局是否高宽为0 ,可以利用LayoutInspector查看ui相关的问题
  • 您可以覆写onShowError(),这里会捕捉所有BasePopup遇到的错误信息。

    BasePopup显示在Dialog/DialogFragment下方

    请阅读以下文档,留意构造器传参:
    BasePopupWindow构造器