Android 软键盘关闭后如何检测屏幕重画完成

Android 软键盘关闭后如何检测屏幕重画完成,android,android-fragments,android-view,Android,Android Fragments,Android View,在我的Android应用程序中,我有一个包含嵌套片段的活动,该活动的属性为: android:windowSoftInputMode="adjustResize" 其中一个嵌套片段包含一个按钮,按下该按钮时,将在按钮所在位置的正上方打开一个对话框片段 当软键盘打开时按下此按钮,软键盘将自动关闭但是,我遇到的问题是,对话框片段将在软键盘关闭之前根据按钮的位置绘制,而不是在软键盘关闭且屏幕重画完成之后绘制。 到目前为止,我所做的是: 在onClick事件中,检查软键盘是否打开-如果打开,不要立即

在我的Android应用程序中,我有一个包含嵌套片段的活动,该活动的属性为:

android:windowSoftInputMode="adjustResize"
其中一个嵌套片段包含一个按钮,按下该按钮时,将在按钮所在位置的正上方打开一个对话框片段

当软键盘打开时按下此按钮,软键盘将自动关闭但是,我遇到的问题是,对话框片段将在软键盘关闭之前根据按钮的位置绘制,而不是在软键盘关闭且屏幕重画完成之后绘制。

到目前为止,我所做的是:

  • 在onClick事件中,检查软键盘是否打开-如果打开,不要立即打开对话框片段(而是设置一个标志)
  • 片段实现View.OnLayoutChangeListener-调用onLayoutChange()时,它会检查标志以查看是否需要打开对话框片段(如果需要,则此时它会获取按钮的坐标,并打开对话框片段)
我发现,当调用onLayoutChange()时,屏幕没有完全重新绘制-软键盘已关闭,但按钮没有移向屏幕底部(即键盘所在的位置有空格)

因此,我需要知道屏幕何时完成重画,以便在打开对话框片段之前确保按钮处于正确位置


提前感谢。

您可以为您的按钮实现View.OnLayoutChangeListener View而不是Fragment

我相信我现在有了一个解决方案

  • 使用View.OnLayoutChangeListener
  • 在onLayoutChange()函数中,我创建了一个本地广播来打开对话框片段,该片段通过广播中的视图
  • 在创建DialogFragment之前,只能在BroadcastManager onReceive()函数中获取一次按钮的坐标

  • 据我所知,这是因为onReceive()函数是在UI线程中调用的,这意味着它将在同一线程中执行,但最重要的是,在屏幕被重新绘制之后。

    感谢您的建议,但这对我仍然不起作用-当在我的Button类中调用onLayoutChange()时,它还没有被重新绘制。