|
@@ -72,7 +72,35 @@ open class MyKMPDFContextMenuCallback(private val kmpdfFactory: KMPDFFactory?) :
|
|
|
}
|
|
|
popupWindow?.isOutsideTouchable = false
|
|
|
popupWindow?.isFocusable = false
|
|
|
- popupWindow?.showAtLocation(view, Gravity.LEFT or Gravity.TOP, position.x, position.y)
|
|
|
+ tryToShowPopupWindow(view, position)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun tryToShowPopupWindow(view: View, position: Point) {
|
|
|
+ if (null != view.windowToken) {
|
|
|
+ showPopupWindow(view, position)
|
|
|
+ } else {
|
|
|
+ view.addOnAttachStateChangeListener(object: View.OnAttachStateChangeListener {
|
|
|
+ override fun onViewAttachedToWindow(view: View) {
|
|
|
+ if (null != view.windowToken) {
|
|
|
+ showPopupWindow(view, position)
|
|
|
+ view.removeOnAttachStateChangeListener(this)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun onViewDetachedFromWindow(view: View) {
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private fun showPopupWindow(view: View, position: Point) {
|
|
|
+ view.post {
|
|
|
+ try {
|
|
|
+ popupWindow?.showAtLocation(view, Gravity.LEFT or Gravity.TOP, position.x, position.y)
|
|
|
+ } catch (e: Exception) {
|
|
|
+ e.printStackTrace()
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|