我有什么:
- 具有
android:configChanges="orientation|screenSize|keyboardHidden"
的 Activity - 上面有一个 DialogFragment
- DialogFragment 上的 ViewA
问题是什么:
我正在使用 ViewA.getLocationOnScreen
获取 View 在屏幕上的位置。当我第一次打开对话框时,位置是正确的。在我旋转屏幕后,由于 android:configChanges
, View 不会以某种方式更新它的位置,即使对话框在 Activity 中正确居中,ViewA 的 getLocationOnScreen 指向旧位置,在旋转。
我尝试过的。
我覆盖了对话框的 onConfigurationChanged
并尝试了这个:
ViewA.requestLayout
(什么都不做)ViewA.getViewTreeObserver().addOnGlobalLayoutListener
并在 onGlobalLayout 上将 topMargin 设置为 1 并再次调用 requestLayout。 (这行得通,但我不想每次旋转屏幕时都设置边距)
我想知道的是如何强制重新定位对话框,使 getLocationOnScreen 在旋转后返回正确的值
请注意,我不想更改 android:configChanges
最佳答案
试着解释一下,如果你有这个 android:configChanges="orientation
就不会重新创建 Activity
,这意味着 View
s 不会被测量,这就是报告旧位置的原因,同时请求在您的 View
上进行完整绘制,您需要在 DialogFrament
的 View 上调用它parent 所以对于整个游戏你的 DecorView
- 调用 invalidate()
& requestLayout()
关于android - getLocationOnScreen 旋转后返回旧位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30936534/