android - getLocationOnScreen 旋转后返回旧位置

标签 android android-dialogfragment

我有什么:

  • 具有 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/

相关文章:

Android DialogFragment 标题未显示

java.lang.IllegalStateException : Couldn't create Engine

android - 为什么使用预定义的 ID 资源设置 imeActionId 会产生错误?

android - 使用 Zbar 或 Zxing 在各个方向扫描条码

android - DialogFragment 中的 ViewPager2 内的 EditText 不会显示键盘

java - 实现 DialogFragment 的回调

java - 从 java 到 kotlin 的 android 应用程序中的 Intent 问题

Android 图标被切断 [React Native]

Android - DialogFragment(AlertDialog) 中的 ListFragment : Fragment does not have a view

Android:支持未显示自定义布局的 DialogFragment