关闭软键盘后,如何检测屏幕重绘完成

时间:2018-09-07 12:58:30

标签: android android-fragments android-view

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

android:windowSoftInputMode="adjustResize"

其中一个嵌套片段包含一个按钮,当按下该按钮时,将在该按钮所在的正上方打开一个对话框片段。

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

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

  • 在onClick事件上,检查软键盘是否已打开-如果已打开,请不要立即打开对话框片段(而是设置一个标志)
  • 该片段实现View.OnLayoutChangeListener-调用onLayoutChange()时,它检查标志以查看是否需要打开对话框片段(如果需要,则此时获取按钮的坐标,然后打开对话框片段)

我发现的是,当调用onLayoutChange()时,屏幕尚未完全重绘-软键盘已关闭,但按钮并未移向屏幕底部(即,有空白空间)键盘在哪里)。

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

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以为ButtonView而非片段实现View.OnLayoutChangeListener

答案 1 :(得分:0)

我相信我现在对此有解决方案...

  1. 使用View.OnLayoutChangeListener。
  2. 在onLayoutChange()函数中,我创建了一个本地广播以打开对话框片段,该对话框片段将通过广播中的视图。
  3. 在创建DialogFragment之前,仅应在BroadcastManager的onReceive()函数中获取按钮的坐标。

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