软键盘关闭后如何检测屏幕重绘完成
How to detect redraw of screen has completed after soft keyboard closes
在我的 Android 应用程序中,我有一个包含嵌套片段的 activity,activity 的 属性 为:
android:windowSoftInputMode="adjustResize"
其中一个嵌套片段包含一个按钮,按下该按钮会在按钮所在位置的正上方打开一个对话框片段。
在软键盘打开的情况下按下此按钮,软键盘会自动关闭。 但是,我遇到的问题是对话框片段将在软键盘关闭之前根据按钮的位置绘制,而不是在软键盘关闭并且屏幕重绘完成之后绘制。
到目前为止我所做的是:
- 在 onClick 事件中,检查软键盘是否打开 - 如果打开,不要立即打开对话框片段(而是设置一个标志)
- 片段实现View.OnLayoutChangeListener - 当onLayoutChange()被调用时,它会检查标志以查看是否需要打开对话框片段(如果是,则获取此时按钮的坐标, 并打开对话框片段)
我发现当 onLayoutChange() 被调用时,屏幕没有完全重绘 - 软键盘已经关闭,但按钮没有移向屏幕底部(即有空白 space 键盘所在的位置)。
因此,我需要知道屏幕何时完成重绘,以便在打开对话框片段之前确保按钮处于正确位置。
提前致谢。
您可以为 ButtonView 实现 View.OnLayoutChangeListener 而不是 Fragment
我相信我现在有办法解决这个问题...
- 使用 View.OnLayoutChangeListener.
- 在 onLayoutChange() 函数中,我创建了一个本地广播来打开对话框片段,它通过广播中的视图。
- 在BroadcastManager onReceive() 函数中只需要在创建DialogFragment 之前获取一次按钮的坐标。
据我了解,这是可行的,因为在 UI 线程中调用了 onReceive() 函数,这意味着它将在同一个线程中执行,但最重要的是之后,屏幕有已重绘。
在我的 Android 应用程序中,我有一个包含嵌套片段的 activity,activity 的 属性 为:
android:windowSoftInputMode="adjustResize"
其中一个嵌套片段包含一个按钮,按下该按钮会在按钮所在位置的正上方打开一个对话框片段。
在软键盘打开的情况下按下此按钮,软键盘会自动关闭。 但是,我遇到的问题是对话框片段将在软键盘关闭之前根据按钮的位置绘制,而不是在软键盘关闭并且屏幕重绘完成之后绘制。
到目前为止我所做的是:
- 在 onClick 事件中,检查软键盘是否打开 - 如果打开,不要立即打开对话框片段(而是设置一个标志)
- 片段实现View.OnLayoutChangeListener - 当onLayoutChange()被调用时,它会检查标志以查看是否需要打开对话框片段(如果是,则获取此时按钮的坐标, 并打开对话框片段)
我发现当 onLayoutChange() 被调用时,屏幕没有完全重绘 - 软键盘已经关闭,但按钮没有移向屏幕底部(即有空白 space 键盘所在的位置)。
因此,我需要知道屏幕何时完成重绘,以便在打开对话框片段之前确保按钮处于正确位置。
提前致谢。
您可以为 ButtonView 实现 View.OnLayoutChangeListener 而不是 Fragment
我相信我现在有办法解决这个问题...
- 使用 View.OnLayoutChangeListener.
- 在 onLayoutChange() 函数中,我创建了一个本地广播来打开对话框片段,它通过广播中的视图。
- 在BroadcastManager onReceive() 函数中只需要在创建DialogFragment 之前获取一次按钮的坐标。
据我了解,这是可行的,因为在 UI 线程中调用了 onReceive() 函数,这意味着它将在同一个线程中执行,但最重要的是之后,屏幕有已重绘。